Ich habe eine Methode, die als Argument einen generischen Typ T verwendet. Wenn T von Typ List ist, möchte ich es in eine Liste umwandeln, in der Y steht die Art von Element, das in T enthalten ist. Ich vermute, dass ich die Beschränkungen der generischen Typen falsch verstehe, aber jede Hilfe würde geschätzt werden.Wie man einen generischen Typ T in eine Liste eines bestimmten Typs umwandelt
Beispiel:
public void MapData<T>(T genericData)
{
var genericDataType = genericData.GetType();
if (genericDataType.Name.Contains("List"))
{
//Cast T to a List containing the type of elements contained in T
}
}
Ich brauche genericData auf eine Liste zu werfen, so dass es in eine andere Methode mit der Signatur passieren kann:
public void MapListToField<T>(List<T> genericList)
UPDATE
Per Eric Antwort unten wollte ich einen Versuch teilen, dass vielleicht jemand meinen Fehler aufzeigen könnte. Der Compiler wird die besagt, dass ich eine Variable als Typ zu verwenden versucht bin, die ich die Bedeutung verstehen, aber element ist ein Typ, also bin ich nicht klar, wie zu beheben:
var elementType = genericData.GetType().GetGenericArguments()[0];
var castedList = genericData as List<elementType>;
Danke Eric. Ich versuchte das, aber sobald ich den Elementtyp hatte, konnte ich nicht in eine Liste dieses Typs umwandeln. Ich habe so etwas versucht: var myCastedList = (Liste) genericData; Es mochte nicht den ElementType, den ich in List platziert hatte, und beschwerte mich darüber, dass es eine Variable war, die ich als Typ –
rvb01
verwenden wollte. Sie können Ausdrücke verwenden, sie haben eine große Flexibilität für generische Typen. Sie können Expression.Convert verwenden, nachdem Sie die Typen identifiziert haben, die in den gewünschten Typ und die Ausführung umgewandelt werden sollen. https://msdn.microsoft.com/en-us/library/mt654265.aspx Ich könnte versuchen, ein detailliertes Beispiel zu schreiben. – Eric
Kennen Sie den Typ der Objekte der Liste, die Sie erwarten? – Eric