【发布时间】:2016-10-09 11:25:11
【问题描述】:
我想要一个泛型方法的两个重载:
public ReturnType<T> DoStuff<T>(T thing) {...}
public ReturnType<T> DoStuff<T>(IEnumerable<T> things) {...}
当然,问题在于 IEnumerable<T> 本身就是一个匹配第一个签名的类型,所以当我尝试将一个集合传递给这个方法时,它会调用第一个重载。
显然,我可以用不同的方式命名这些方法以消除歧义。但鉴于这些方法本质上是做同样的事情,我想将它们保留为重载。
有没有办法在第一个签名中定义T,使其不接受IEnumerable作为参数?
【问题讨论】:
-
我不知道为重载类型“最佳”选择提供 exclusive 命令的可能性。您可能希望在第二种方法中添加一个虚拟参数并区分签名
-
好吧,当您不传入该确切类型时,泛型类型 - 根据定义 - 比
IEnumerable<T>更精确。您可以从调用者的角度更改它,方法是在此之前调用.AsEnumerable()