Heim > Backend-Entwicklung > C++ > Wie kann ich den Typ „T' einer leeren generischen Liste in C# bestimmen?

Wie kann ich den Typ „T' einer leeren generischen Liste in C# bestimmen?

Susan Sarandon
Freigeben: 2025-01-08 18:47:41
Original
511 Leute haben es durchsucht

How Can I Determine the Type `T` of an Empty Generic List in C#?

Generische C#-ListeList<T>: Bestimmen Sie den Typ von T

In C# können Sie mit einer generischen Liste Elemente eines bestimmten Typs speichern. Was aber, wenn Sie den T-Typ einer leeren generischen Liste bestimmen müssen?

Stellen Sie sich das folgende Szenario vor:

<code class="language-csharp">List<myclass> myList = dataGenerator.getMyClasses();
lbxObjects.ItemsSource = myList;
lbxObjects.SelectionChanged += lbxObjects_SelectionChanged;</code>
Nach dem Login kopieren

Im lbxObjects_SelectionChanged-Ereignis verwenden Sie Reflektion, um Informationen über die Eigenschaften des ausgewählten Objekts abzurufen. Für eine generische Liste (List<T>) möchten Sie den Typ der darin enthaltenen Elemente ermitteln.

Hierfür können Sie die Methode GetGenericType verwenden. Diese Methode funktioniert, wenn die Liste Elemente enthält. Diese Methode schlägt jedoch fehl, wenn die Liste leer ist. Um dieses Problem zu lösen, müssen Sie auf die Typinformationen zugreifen, unabhängig davon, ob Elemente vorhanden sind oder nicht.

Die Lösung liegt in der Überprüfung des in pi.PropertyType gespeicherten Attributtyps. Das Folgende ist der geänderte Code:

<code class="language-csharp">// 如果List<T>包含一个或多个元素,则此方法有效。
Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null));

// 如果列表为空,使用以下方法获取T的类型
Type type = pi.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
{
    Type itemType = type.GetGenericArguments()[0];
    // 在此处使用itemType...
}</code>
Nach dem Login kopieren

Alternativ können Sie für eine umfassendere Unterstützung die von diesem Typ implementierten Schnittstellen überprüfen:

<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces())
{
    if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>))
    {
        Type itemType = interfaceType.GetGenericArguments()[0];
        // 对itemType执行某些操作...
        break;
    }
}</code>
Nach dem Login kopieren

Mit diesen Methoden können Sie Tden Typ generischer Listen effektiv bestimmen, unabhängig davon, ob sie Elemente enthalten.

Diese überarbeitete Ausgabe behält das Originalbild bei und verbessert die Codeformatierung für eine bessere Lesbarkeit. Die wichtigsten Änderungen sind die Verwendung von List<> anstelle von List in der typeof-Prüfung für eine bessere Typübereinstimmung und eine Verbesserung des Gesamtflusses und der Klarheit die Erklärung.

Das obige ist der detaillierte Inhalt vonWie kann ich den Typ „T' einer leeren generischen Liste in C# bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage