有没有一种方法可以为通用类提供多个签名

时间:2019-04-04 14:06:54

标签: c# generics

我有一个带有复杂签名的通用类,为方便起见,如果所有类型参数都相同,我想简化一下。

MyClass<T1, T2, T3, T4>

如果所有类型参数都是Guid,我只想提供一个类型参数,那么我想到的唯一方法就是定义另一个类。

MyClass<T1> : MyClass<T1, T1, T1, T1>

是否有更好的方法来实现此功能?最终,除了使用简化签名的能力之外,我不希望这些类之间有任何其他区别。

2 个答案:

答案 0 :(得分:2)

不幸的是,编译器通常无法基于其他通用类型参数来推断通用类型参数。因此,您必须指定全部或不指定任何内容。如果引用一个类,则始终必须指定所有类型参数。

但是,编译器可能有机会从传递的参数中推断方法的泛型类型参数,因此您可以做的事情类似

public MyClass<T, T, T, T> CreateMyClass<T>(T item)

如果提供这样的API,以便用户不必依赖构造函数,则可能有机会将显式类型参数保持在最低限度。

答案 1 :(得分:0)

不。这是唯一的方法。就编译器而言,T1T2T3T4是无关的。