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
Freigeben: 2025-01-14 16:01:44
Original
843 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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