IEnumerable<Animal>
を実装している基本クラスから派生したクラスにIEnumerable<Turtle>
を実装しようとしています。派生クラスのIEnumerableベースクラスでLINQメソッドを使用できません
のメソッドのうち、base.Cast<Turtle>()
(または基本要素の任意のLINQメソッド)をコンパイルできないのはなぜですか?
base
をthis
に置き換えることは、明らかにStackOverflowException
となります。 StackOverflowException
を投げずにthis.OfType<Animal>().Cast<Turtle>().GetEnumerator();
作品とbase.Cast<Turtle>().GetEnumerator();
を交換し、いくつかの理由
public interface IAnimal {}
public class Animal : IAnimal {}
public class Turtle : Animal {}
public class AnimalEnumerable : IEnumerable<Animal> {
List<Animal> Animals = new List<Animal>();
IEnumerator<Animal> IEnumerable<Animal>.GetEnumerator() {
return Animals.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return Animals.GetEnumerator();
}
}
public class TurtleEnumerable : AnimalEnumerable, IEnumerable<Turtle> {
IEnumerator<Turtle> IEnumerable<Turtle>.GetEnumerator() {
return base.Cast<Turtle>().GetEnumerator(); //FAILS WITH "CANNOT RESOLVE SYMBOL Cast"
}
}
、私は、なぜ分からない:ここでは
は、問題を再現するために、最小限のコードサンプルです。
どうしたらいいですか?これらは異なるクラスです - TurtleEnumerableはどのようにもTurtleから継承しません。IEnumerable –
srandppl
TurtleEnumerableはAnimalEnumerableクラスから継承しているため、基本要素にアクセスできる必要があります。 –
似たようなもの:http:// stackoverflow。com/questions/27883427/why-cant-i-call-an-extension-method-from-the-extended-type拡張タイプ – romanoza