Heim > Backend-Entwicklung > C++ > Wie kann ich Konstruktorargumente an eine generische „new()'-Einschränkung in C# übergeben?

Wie kann ich Konstruktorargumente an eine generische „new()'-Einschränkung in C# übergeben?

Susan Sarandon
Freigeben: 2025-01-22 13:36:14
Original
230 Leute haben es durchsucht

How Can I Pass Constructor Arguments to a Generic `new()` Constraint in C#?

Übergabe von Generika für Vorlagentypen in C#-new()Konstruktorparametern

Frage:

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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