Search code examples
c#genericsparametersconstructorgeneric-constraints

Is there a generic constructor with parameter constraint in C#?


In C# you can put a constraint on a generic method like:

public class A {
    
    public static T Method<T> (T a) where T : new() {
        //...do something...
        return new T();
    }
    
}

Where you specify that T should have a constructor that requires no parameters. I'm wondering whether there is a way to add a constraint like "there exists a constructor with a float[,] parameter?"

The following code doesn't compile:

public class A {
    
    public static T Method<T> (T a) where T : new(float[,] u) {
        //...do something...
        return new T(new float[0,0]);
    }
    
}

A workaround is also useful?


Solution

  • As you've found, you can't do this.

    As a workaround I normally supply a delegate that can create objects of type T:

    public class A {
    
        public static void Method<T> (T a, Func<float[,], T> creator) {
            //...do something...
        }
    
    }