Heim >Backend-Entwicklung >C++ >Können generische C#-Methoden Typparameter auf bestimmte Konstruktoren beschränken?
Konstruktoreinschränkungen mit Parameterspezifikation in C#
In C# ermöglichen generische Methoden die Auferlegung von Einschränkungen für Typparameter. Der folgende Code zeigt beispielsweise eine Einschränkung, die erfordert, dass der Parametertyp T über einen parameterlosen Konstruktor verfügt:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new() { //...do something... return new T(); } }</code>
Da stellt sich die Frage: Können wir die Einschränkungen verfeinern und angeben, dass T einen Konstruktor haben sollte, der ein float[,]-Argument akzeptiert? Leider schlägt der folgende Kompilierungsversuch fehl:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { //...do something... return new T(new float[0,0]); } }</code>
Lösung
Da diese Einschränkung nicht verwendet werden kann, können wir einen Workaround übernehmen und einen Delegaten verwenden, um ein Objekt vom Typ T zu initialisieren:
<code class="language-csharp">public class A { public static void Method<T>(T a, Func<float[,], T> creator) { //...do something... } }</code>
Das obige ist der detaillierte Inhalt vonKönnen generische C#-Methoden Typparameter auf bestimmte Konstruktoren beschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!