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
verwendenUm 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!