Heim > Backend-Entwicklung > C++ > Wie kann ich beim Instanziieren eines generischen Typs in C# Argumente an einen Konstruktor übergeben?

Wie kann ich beim Instanziieren eines generischen Typs in C# Argumente an einen Konstruktor übergeben?

Susan Sarandon
Freigeben: 2025-01-22 13:46:10
Original
306 Leute haben es durchsucht

How Can I Pass Arguments to a Constructor When Instantiating a Generic Type in C#?

Übergabe von Konstruktorargumenten an generische Typen in C#

Das Erstellen von Instanzen generischer Typen mit parametrisierten Konstruktoren in C# kann eine Herausforderung darstellen. Der Versuch einer direkten Instanziierung führt häufig zu der Fehlermeldung: „Beim Erstellen einer Instanz einer Variablen können keine Argumente bereitgestellt werden.“ Dies liegt daran, dass der Compiler zur Kompilierungszeit die spezifische Konstruktorsignatur nicht kennt.

Die new()-Einschränkung erlaubt nur parameterlose Konstruktoren. Um Konstruktoren mit Argumenten zu verarbeiten, besteht eine gängige Lösung in der Verwendung einer Factory-Methode (häufig dargestellt als Delegate).

So können Sie das erreichen:

Anstatt den generischen Typ direkt zu instanziieren, übergeben Sie einen Delegaten (z. B. ein Func) an Ihre generische Methode. Dieser Delegat fungiert als Factory und ist für die Erstellung des Objekts mit den erforderlichen Konstruktorargumenten verantwortlich.

Beispiel:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) {
  // ...
  List<T> tabListItems = new List<T>();
  foreach (ListItem listItem in listCollection) 
  {
    tabListItems.Add(factoryMethod(listItem));
  }
  // ...
}</code>
Nach dem Login kopieren

Diese GetAllItems-Methode akzeptiert jetzt einen Func<ListItem, T>-Delegierten. Dieser Delegat nimmt ein ListItem als Eingabe und gibt eine Instanz vom Typ T.

zurück

Verwendung:

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

In diesem Beispiel dient der Lambda-Ausdruck l => new Foo(l) als Factory-Methode. Es nimmt ein ListItem (l) und verwendet es, um mit dem Konstruktor von Foo ein neues Foo-Objekt zu erstellen. Dadurch wird das ListItem-Argument effektiv an den Foo-Konstruktor übergeben.

Dieser Ansatz ermöglicht eine flexible Instanziierung generischer Typen, auch solcher mit parametrisierten Konstruktoren, indem die Objekterstellungslogik von der generischen Methode selbst getrennt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Instanziieren eines generischen Typs in C# Argumente an einen Konstruktor ü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