两种签名不明确的扩展方法

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);