Heim >Backend-Entwicklung >C++ >Wie kann ich Konstruktorargumente an eine generische „new()'-Einschränkung in C# übergeben?
new()
KonstruktorparameternFrage:
Ein Kompilierungsfehler tritt auf, wenn versucht wird, ein neues Objekt vom Typ T mit einem Konstruktorargument in einer generischen Methode unter Verwendung der new()
-Einschränkung zu erstellen. Die Fehlermeldung besagt, dass der Parameter während der Objektinitialisierung nicht angegeben werden kann.
<code class="language-csharp">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>
Lösung:
Um ein Objekt eines generischen Typs mithilfe von Konstruktorargumenten zu erstellen, reicht es nicht aus, nur die Einschränkung new
zu verwenden. Es muss eine benutzerdefinierte Funktion eingeführt werden, um die Initialisierung mit den erforderlichen Parametern durchzuführen. So geht's:
<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>
Durch die Verwendung einer benutzerdefinierten Funktion können Sie eine generische Methode aufrufen, den Typ angeben und eine Initialisierungsfunktion wie folgt bereitstellen:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
Das obige ist der detaillierte Inhalt vonWie kann ich Konstruktorargumente an eine generische „new()'-Einschränkung in C# übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!