Siehe den folgenden Beispielcode.Wie erstellt man eine Liste <I> mit Instanzen von B, gegeben Instanzen von A (A stammt von B und B implementiert I)?
public interface I
{
int ID { get; set; }
}
public class B : I
{
public int ID { get; set; }
public string PropB { get; set; }
}
public class A : B
{
public string PropA { get; set; }
public IEnumerable<I> GetListOfBase()
{
// Attempt #1
var list1 = new List<I>();
B b1 = this as B;
list1.Add(b1);
// Attempt #2
var list2 = new List<I>();
B b2 = (B)this.MemberwiseClone();
list2.Add(b2);
return list1;
}
}
private static void TestGetListOfBase()
{
var a = new A() { ID = 1, PropA = "aaa", PropB = "bbb" };
var list = a.GetListOfBase();
}
In beiden meinen Versuchen, die Liste enthält Instanzen von A muß ich es Instanzen von B zu I enthält, ein neues B zu vermeiden, versuchen die Schaffung dann von A Kopieren die Eigenschaften zu B (Ich gehe davon aus, dass wird funktionieren!).
EDIT: Der Grund, warum ich eine Liste von Bs brauche, ist, dass später jedes B in NPOco (ein .NET-Mikro-ORM, abgeleitet von PetaPoco) übergeben wird. NPoco übernimmt den Namen des Typs und ermittelt daraus die zuzuordnende DB-Tabelle. Daher ist es von entscheidender Bedeutung, dass eine Variable vom richtigen Typ an die Methode übergeben wird.
Mögliches Duplikat von [Liste umwandeln in Liste ] (http://stackoverflow.com/questions/1817300/convert-listderivedclass-to-listbaseclass) –
Da A von B abgeleitet ist, ist jede Instanz von A ein Instanz von B. Überall können Sie ein B, y verwenden Sie können auch ein A verwenden. Können Sie erklären, warum Sie eine Liste von Bs erstellen müssen? –
Es ist so, dass ich die Liste in NPOco übergeben kann (ein .NET-Mikro-ORM, abgeleitet von PetaPoco). NPoco übernimmt den Namen des Typs und ermittelt daraus die zuzuordnende DB-Tabelle. Daher ist es von entscheidender Bedeutung, dass eine Variable vom richtigen Typ an die Methode übergeben wird. – Laurence