【发布时间】:2016-12-15 18:26:37
【问题描述】:
public static string AddRange(this List<Parameter> parameters, string name, object[] values)
{
...
}
public static string AddRange(this List<Parameter> parameters, string name, IEnumerable<object> values)
{
return parameters.AddRange(name, values.ToArray());
}
这个组合,当这样调用时:
SomeFunction(params string[] keys)
{
...
parameters.AddRange("paramKeys", keys);
...
}
抛出
以下方法或属性之间的调用不明确:'ExtensionMethods.AddRange(List, string, object[])' 和 'ExtensionMethods.AddRange(List, string, IEnumerable)'
我大致知道为什么会抛出这个问题(一个数组也是一个 IEnumerable),但我不知道如何在不删除这两种方法中的任何一种的情况下修复它。如何告诉IEnumerable<object> 方法它不负责数组,而是负责所有其他类型的IEnumerable<object>?
【问题讨论】:
-
为什么一开始有两个重载?
-
你可以投到你想要的
parameters.AddRange("paramKeys", (object[])keys) -
我在 Visual Studio 2015 中没有遇到任何编译错误。是因为 C# 6.0 的Improved overload resolution?
-
另请参阅stackoverflow.com/questions/26606199/… 和stackoverflow.com/questions/1451099/…,了解有关重载解决方案的有用讨论,因为它适用于这些类型的模棱两可的场景。
标签: c# overloading