两种签名不明确的扩展方法
Two extension methods with ambiguous signature
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);
...
}
投掷
The call is ambiguous between the following methods or properties: 'ExtensionMethods.AddRange(List, string, object[])' and 'ExtensionMethods.AddRange(List, string, IEnumerable)'
我大致知道为什么会抛出这个问题(数组也是一个 IEnumerable),但我不知道如何在不删除这两种方法中的任何一种的情况下修复它。我如何告诉 IEnumerable<object>
方法它不负责数组,而是负责所有其他类型的 IEnumerable<object>
?
您遇到问题是因为 string[]
是 IEnumberable
的类型,但也是 object[]
的类型(因为所有引用类型都派生自 object
)。
您需要做的是将其转换为扩展方法期望的正确类型:
parameters.AddRange("paramKeys", (object[])keys);
// OR
parameters.AddRange("paramKeys", (IEnumerable<object>)keys);
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);
...
}
投掷
The call is ambiguous between the following methods or properties: 'ExtensionMethods.AddRange(List, string, object[])' and 'ExtensionMethods.AddRange(List, string, IEnumerable)'
我大致知道为什么会抛出这个问题(数组也是一个 IEnumerable),但我不知道如何在不删除这两种方法中的任何一种的情况下修复它。我如何告诉 IEnumerable<object>
方法它不负责数组,而是负责所有其他类型的 IEnumerable<object>
?
您遇到问题是因为 string[]
是 IEnumberable
的类型,但也是 object[]
的类型(因为所有引用类型都派生自 object
)。
您需要做的是将其转换为扩展方法期望的正确类型:
parameters.AddRange("paramKeys", (object[])keys);
// OR
parameters.AddRange("paramKeys", (IEnumerable<object>)keys);