多种类型的通用方法

时间:2018-08-28 09:48:37

标签: c# generics methods overloading

如果我希望泛型方法具有许多泛型类型,例如最多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?
}

1 个答案:

答案 0 :(得分:3)

如果您查看Action<T1, T2, ....>的文档,似乎您需要单手实现所有重载。

这里是reference source。如您所见,已完成您的示例。

Jon Skeet here可以找到关于为什么不存在等效params的更详细的答案。 它指出:

“就CLR而言,Func<T>Func<T1, T2>基本上是完全不相关的类型,没有像params这样的参数可以指定多个类型参数。”