【问题标题】:Two extension methods with ambiguous signature [duplicate]签名不明确的两种扩展方法[重复]
【发布时间】: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&lt;object&gt; 方法它不负责数组,而是负责所有其他类型的IEnumerable&lt;object&gt;

【问题讨论】:

标签: c# overloading


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2010-12-23
    • 2011-05-06
    • 2016-12-21
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多