Wenn ich eine Root-SchnittstelleKonvertieren MyClass <TDescendent> zu MyClass <TAncestor>
public interface IEntity {}
und eine abgeleitete Schnittstelle und Klassen haben:
public interface IFruit : IEntity {}
public class Apple : IFruit {}
public class Orange: IFruit {}
Und irrelevant, aber vielleicht andere, die nicht implementieren IFruit
:
public class Computer : IEntity {}
Und eine generische Klasse dass nutzt all dies:
public class PurchasedItem<T> where T : IFruit
{
public int Qty{get;set;}
public T Item{get;set;}
}
Wie kann ich eine Liste deklarieren, die PurchasedItem<IFruit>
und mit ihr arbeiten enthält?
Wenn ich dies tun:
var list = new List<PurchasedItem<IFruit>>();
list.Add(new PurchasedItem<Apple>());
... dann bekomme ich einen Fehler
Cannot convert from PurchasedItem<Apple> to PurchasedItem<IFruit>
mit einer Schnittstelle erstellen und arbeiten, das * ist *, wie erklären Sie eine Liste, die 'PurchasedItem enthält' und arbeite damit. Das bedeutet, dass Sie kein 'PurchasedItem ' darin speichern können, da dies kein' PurchasedItem 'ist. Dies wurde schon oft gefragt, ich werde sehen, ob ich eine gute Frage mit detaillierter Antwort finden kann. –
hvd
hast du versucht, zum Basistyp zu gießen? , Neu PurchasedItem()). Cast –
@ Shachaf.Gortler Das gilt hier nicht, wäre aber nicht nützlich, auch wenn es galt. – hvd