C# generic methods, type parameters in new() constructor constraint
Solution 1:
Not really; C# only supports no-args constructor constraints.
The workaround I use for generic arg constructors is to specify the constructor as a delegate:
public T MyGenericMethod<T>(MyClass c, Func<MyClass, T> ctor) {
// ...
T newTObj = ctor(c);
// ...
}
then when calling:
MyClass c = new MyClass();
MyGenericMethod<OtherClass>(c, co => new OtherClass(co));
Solution 2:
No. Unfortunately, generic constraints only allow you to include:
where T : new()
Which specifies that there is a default, parameterless constructor. There is no way to constrain to a type with a constructor which accepts a specific parameter type.
For details, see Constraints on Type Parameters.
Solution 3:
No, it is not possible in C# to constrain the generic type to have a constructor of a specific signature. Only the parameterless constructor is supported by new().