两种带有模糊签名的扩展方法

时间:2016-08-09 15:50:00

标签: c# overloading

SomeFunction(params string[] keys)
{
    ...
    parameters.AddRange("paramKeys", keys);
    ...
}

这种组合,如下所示:

IEnumerable<object>

抛出

  

以下方法或属性之间的调用不明确:'ExtensionMethods.AddRange(List,string,object [])'和'ExtensionMethods.AddRange(List,string,IEnumerable)'

我大致知道为什么抛出它(一个数组也是IEnumerable),但我不知道如何修复它而不删除任何两种方法。如何告诉IEnumerable<object>方法它不对数组负责,而是对所有其他类型的{{1}}负责?

1 个答案:

答案 0 :(得分:1)

您遇到了问题,因为string[]的类型为IEnumberable,但也是object[]的类型(因为所有引用类型都来自object)。

您需要做的是将其转换为扩展方法所期望的正确类型:

parameters.AddRange("paramKeys", (object[])keys);
// OR
parameters.AddRange("paramKeys", (IEnumerable<object>)keys);