如果我希望泛型方法具有许多泛型类型,例如最多16。
我是否必须将方法重载16次,或者有更聪明的方法吗?
public interface IMyInterface { }
public class MyClass {
public void MyMethod<T1>() where T1 : IMyInterface { }
public void MyMethod<T1, T2>() where T1 : IMyInterface where T2 : IMyInterface { }
public void MyMethod<T1, T2, T3>() where T1 : IMyInterface where T2 : IMyInterface
where T3 : IMyInterface { }
public void MyMethod<T1, T2, T3, T4>() where T1 : IMyInterface where T2 : IMyInterface
where T3 : IMyInterface where T4 : IMyInterface { }
// All the way to T16...
// Is there any smarter way of doing this
// instead of having to write it 16 times?
}
答案 0 :(得分:3)
如果您查看Action<T1, T2, ....>
的文档,似乎您需要单手实现所有重载。
这里是reference source。如您所见,已完成您的示例。
Jon Skeet here可以找到关于为什么不存在等效params
的更详细的答案。
它指出:
“就CLR而言,Func<T>
和Func<T1, T2>
基本上是完全不相关的类型,没有像params这样的参数可以指定多个类型参数。”