Heim >Backend-Entwicklung >C++ >Können generische C#-Methoden Typparameter auf bestimmte Konstruktoren beschränken?

Können generische C#-Methoden Typparameter auf bestimmte Konstruktoren beschränken?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-14 16:01:44847Durchsuche

Can C# Generic Methods Constrain Type Parameters to Specific Constructors?

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!

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