Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe der „new()'-Einschränkung Argumente an einen generischen Konstruktor in C# übergeben?

Wie kann ich mithilfe der „new()'-Einschränkung Argumente an einen generischen Konstruktor in C# übergeben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 13:57:11277Durchsuche

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

Verwenden von new()-Einschränkungen in C#, um Parameter an generische Konstruktoren zu übergeben

Wenn Sie Elemente zu einer Liste hinzufügen und versuchen, ein neues Objekt vom Typ T mit Konstruktorparametern zu erstellen, kann es zu einem Kompilierungsfehler kommen, der besagt, dass die Parameter beim Erstellen einer Variableninstanz nicht bereitgestellt werden können. Dieser Fehler tritt auch dann auf, wenn die Klasse Konstruktorparameter enthält.

Um dieses Problem zu lösen, müssen new() Einschränkungen generischer Typen verwendet werden. Während diese Einschränkung die Erstellung von Parametern ohne Instanzen ermöglicht, ist sie für den Fall, dass Konstruktorparameter enthalten sind, nicht ausreichend.

Die Alternative besteht darin, einen Parameter einzuführen, sodass das Objekt basierend auf dem Parameter erstellt wird. Funktionen können dies effizient bewerkstelligen.

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

Diese Funktion kann mit einem Lambda-Ausdruck aufgerufen werden, der ein neues Objekt mit den erforderlichen Parametern erstellt:

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

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe der „new()'-Einschränkung Argumente an einen generischen Konstruktor in C# übergeben?. 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