2011-01-12 29 views
1

IHerdを実装するすべてのAnimalオブジェクトを返そうとしています。インターフェイスを実装するGeneric Listオブジェクトをすべて返す

誰かが私を方向に向けることができますか?

public interface IHerd { 
     void Herd(); 
    } 

    public class Dog : Animals, IHerd { 
     public void Herd() { 
      // Swim method 
     } 
    } 

    public class Animals { 
     public void Eat() { } 
     public void Poop() { } 
    } 

    public class Farm { 
     public List<Animals> FarmAnimals = new List<Animals>(); 

     public Animals GetHerders() { 
      return FarmAnimals.OfType<IHerd>(); 
     } 
    } 

答えて

1
​​

また、あなたは `Cast`を必要としない

+0

に一致するように、あなたの戻り値の型を変更する必要があります。 – Gabe

+0

'IHerd'と' Animals'は同じクラスに実装されている場合にのみ関連しているので、 'List 'を 'List 'として暗黙的に扱うことはできません動物から派生したクラスではありません。 IHerdの代わりに、派生クラスHerdAnimalが実装されている場合、Framework v4.0を使用している場合、キャストを避けることができます。これにより、Listsが共変します。 – KeithS

1
FarmAnimals.Where(x => x is IHerd) 
1
return Animals.OfType<IHerd>().OfType<Animals>() 
+0

@Downvoterなぜですか? –

関連する問題