【问题标题】:Ambiguous call on extension method对扩展方法的模糊调用
【发布时间】:2013-03-28 16:07:18
【问题描述】:

我的项目中有一个运行良好的扩展方法:

public static class Extensions
{
    public static bool IsBetween<T>(this T value, T low, T high) 
                                                         where T : IComparable<T>
    {
        return value.CompareTo(low) >= 0 && value.CompareTo(high) <= 0;
    }
}

现在,当我尝试构建我的项目时,我收到了这个错误:

错误 1699 以下方法之间的调用不明确或 特性: 'BillingFormsApplication.Extensions.IsBetween(双,双, 双)'和 'BillingFormsApplication.Extensions.IsBetween(双,双, 双)'

Extensions 文件中只有一个IsBetween 方法...并且整个解决方案中只有一个IsBetween 方法。

我尝试清理并重建解决方案。仍然收到错误。

我可以删除扩展程序并继续使用,但过去它非常方便。

为弗雷德里克添加:

                    if (percentCash.IsBetween(0, 99))
                {

我想知道我是否将这些数字转换为 Double 是否可以解决问题。我马上试试。喜欢:

if (percentCash.IsBetween((double)0, (double)99))

【问题讨论】:

  • 刚刚注意到方法签名在“where T:”之后缺少“IComparable”,这是我添加问题时的错字,但它在代码中。
  • 尝试注释掉扩展,看看智能是否仍然能够解析一些IsBetween方法
  • 也许你从多个 dll 中引用了这个扩展。
  • 你能把代码贴在调用现场吗?
  • 刚刚为您添加了 Frederic。谢谢!

标签: c#


【解决方案1】:

很可能,您引用的 DLL 定义了相同的扩展方法,或者您在代码中的其他地方定义了该扩展方法。尝试在文件中查找 IsBetween 并查看它是否出现。如果没有,请查看您引用的 DLL,看看其中一个中是否不存在此扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多