Heim >Backend-Entwicklung >C++ >Wie übergebe ich beim Erstellen von Objekten Argumente an eine generische C#-Einschränkung „new()'?
Übergeben Sie Parameter an new()
des generischen C#-Vorlagentyps
Wenn Sie versuchen, während der Listenerweiterung mithilfe seines Konstruktors ein neues Objekt vom generischen Typ T zu erstellen, kann ein Kompilierungsfehler mit der Meldung „T: beim Erstellen einer Variableninstanz können keine Argumente bereitgestellt werden“ auftreten.
Dieser Fehler tritt auf, weil Sie versuchen, einen Konstruktor mit Parametern für einen generischen Typ aufzurufen, der durch das „new“-Flag eingeschränkt ist, das nur die Instanziierung von Objekten ohne Konstruktorparameter ermöglicht.
Lösung:
Um ein Objekt eines generischen Typs mit Konstruktorparametern zu erstellen, müssen Sie die „neue“ Einschränkung entfernen und stattdessen einen Delegaten bereitstellen, der das Objekt basierend auf den angegebenen Parametern erstellt. Hier ist ein Beispiel:
<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 akzeptiert einen Delegaten del
, der ein ListItem als Parameter akzeptiert und ein Objekt vom Typ T zurückgibt. Anschließend können Sie diese Funktion aufrufen und den Lambda-Ausdruck als Delegaten übergeben, um ein Objekt des erforderlichen Typs mit den erforderlichen Parametern zu erstellen:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
Durch die Verwendung von Delegaten können Sie eine benutzerdefinierte Initialisierungslogik für die Objekte bereitstellen, die Sie erstellen möchten, und gleichzeitig die Flexibilität der generischen Programmierung beibehalten.
Das obige ist der detaillierte Inhalt vonWie übergebe ich beim Erstellen von Objekten Argumente an eine generische C#-Einschränkung „new()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!