2011-01-12 56 views
1

我試圖返回實現IHerd的所有動物對象。返回實現接口的所有通用列表對象

有人能指點我嗎?

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
​​

你還需要改變你的返回類型相匹配

+0

你不需要`Cast`。 – Gabe 2011-01-12 19:46:21

+0

是的,因爲「IHerd」和「Animals」僅在它們有時在同一個類中實現時相關,因此不能隱含地將「List 」作爲「List 」,因爲IHerd可以實現不從動物派生的類。如果不是IHerd,實現了派生類HerdAnimal,如果您使用的Framework v4.0使List協變,您可以避免強制轉換。 – KeithS 2011-01-12 20:10:17

1
FarmAnimals.Where(x => x is IHerd) 
1
return Animals.OfType<IHerd>().OfType<Animals>() 
相關問題