我有一个带有复杂签名的通用类,为方便起见,如果所有类型参数都相同,我想简化一下。
MyClass<T1, T2, T3, T4>
如果所有类型参数都是Guid,我只想提供一个类型参数,那么我想到的唯一方法就是定义另一个类。
MyClass<T1> : MyClass<T1, T1, T1, T1>
是否有更好的方法来实现此功能?最终,除了使用简化签名的能力之外,我不希望这些类之间有任何其他区别。
答案 0 :(得分:2)
不幸的是,编译器通常无法基于其他通用类型参数来推断通用类型参数。因此,您必须指定全部或不指定任何内容。如果引用一个类,则始终必须指定所有类型参数。
但是,编译器可能有机会从传递的参数中推断方法的泛型类型参数,因此您可以做的事情类似
public MyClass<T, T, T, T> CreateMyClass<T>(T item)
如果提供这样的API,以便用户不必依赖构造函数,则可能有机会将显式类型参数保持在最低限度。
答案 1 :(得分:0)
不。这是唯一的方法。就编译器而言,T1
,T2
,T3
和T4
是无关的。