Home >Backend Development >C++ >Can C# Generic Constraints Specify Constructors with Specific Parameter Types?
C# generic constructor and parameter constraints
Generic constraints in C# allow specifying conditions on type parameters. The "new()" constraint is one of the common constraints that ensures that a type has a parameterless constructor. However, some situations may require more specific constraints on constructor parameters.
Question:
Can I specify a generic constraint that requires the existence of a constructor with a specific parameter type? For example, can a generic type T be constrained to have a constructor that accepts a "float[,]" parameter?
As shown below, directly trying to implement such constraints will cause compilation to fail:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { return new T(new float[0, 0]); } }</code>
Answer:
Unfortunately, such constraints cannot be specified directly in C#. However, there is a workaround available.
Workaround:
A common workaround is to provide a delegate that creates an object of the required type with specified parameters. This delegate can then be passed as a parameter to the generic method.
<code class="language-csharp">public class A { public static void Method<T>(T a, Func<float[,], T> creator) { // ... 执行某些操作 ... } }</code>
This approach allows flexibility in specifying constructor parameters, as the delegate can be customized to instantiate objects with specific values.
The above is the detailed content of Can C# Generic Constraints Specify Constructors with Specific Parameter Types?. For more information, please follow other related articles on the PHP Chinese website!