Heim >Backend-Entwicklung >C++ >Wie kann ich Instanzen generischer Typen mit Konstruktoren in C# erstellen?

Wie kann ich Instanzen generischer Typen mit Konstruktoren in C# erstellen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-22 13:42:111010Durchsuche

How Can I Create Instances of Generic Types with Constructors in C#?

Erstellen von Instanzen generischer Typen mithilfe von Konstruktoren in C#

In C# kann die Verwendung von Konstruktoren zum Erstellen neuer Objekte generischer Typen eine Herausforderung sein. Stellen Sie sich das folgende Szenario vor:

<code class="language-csharp">// 创建类型为T的对象列表
public static string GetAllItems<T>() where T : new()
{
    ...
    List<T> tabListItems = new List<T>();

    // 尝试使用构造函数参数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(new T(listItem)); // 错误!
    }
    ...
}</code>

Beim Versuch, diesen Code zu kompilieren, kann ein Compilerfehler auftreten, der besagt, dass beim Erstellen einer Instanz der Variablen T kein Argument angegeben werden kann. Dies liegt daran, dass die Einschränkung new() nur die Erstellung von Objekten ohne Parameter zulässt.

Lösung: Funktion

verwenden

Um diese Einschränkung zu überwinden, können Sie einen Parameter bereitstellen, der die Erstellung des Objekts basierend auf dem Parameter ermöglicht. Eine praktische Lösung ist die Verwendung einer Funktion:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> del)
{
    ...
    List<T> tabListItems = new List<T>();

    // 使用提供的函数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(del(listItem));
    }
    ...
}</code>

Aufruffunktion

Um diese Funktion zu nutzen, rufen Sie sie wie folgt auf:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>

Dieser Ansatz ermöglicht es Ihnen, mit einem Konstruktor neue Objekte eines generischen Typs zu erstellen, sogar innerhalb einer generischen Funktion.

Das obige ist der detaillierte Inhalt vonWie kann ich Instanzen generischer Typen mit Konstruktoren in C# erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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