Is there a way to create a Generic Method that uses the new()
constructor constraint to require classes with constructors of specific types?
For Example:
I have the following code:
public T MyGenericMethod<T>(MyClass c) where T : class { if (typeof(T).GetConstructor(new Type[] { typeof(MyClass) }) == null) { throw new ArgumentException("Invalid class supplied"); } // ... }
Is it possible to have something like this instead?
public T MyGenericMethod<T>(MyClass c) where T : new(MyClass) { // ... }
EDIT: There's a suggestion regarding this. Please vote so we can have this feature in C#!
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));
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With