c# - 当只有一个具有给定名称的方法时,Visual Studio 指出存在不明确的调用

标签 c# wcf compilation

我想弄清楚为什么会这样,但我做不到。我有一个 WCF 服务,我在其中创建了一个名为 ExtensionUtil 的类,它只包含扩展方法。

目前我在 ExntensionUtil 类中拥有的唯一方法称为 AddWithNullableValue。它看起来像这样:

public static void AddWithNullableValue(this SqlParameterCollection paramCollection, string paramName, object value)
{
    SqlParameter param = new SqlParameter();

    param.ParameterName = paramName;
    param.Value = value == null ? DBNull.Value : value;

    paramCollection.Add(param);
}

我在 DAL 中使用这种方法是这样的:

sqlCommand.Parameters.AddWithNullableValue("@categoryId", publication.CategoryId);

一切编译正常。但是,当我尝试启动服务时出现编译错误,指出:

The call is ambiguous between the following methods or properties:
 'App_Code.Util.ExtensionUtil.AddWithNullableValue(System.Data.SqlClient.SqlParameterCollection, string, object)' and
 'App_Code.Util.ExtensionUtil.AddWithNullableValue(System.Data.SqlClient.SqlParameterCollection, string, object)'

为什么会这样?我只有一个方法具有此名称,编译器说该调用不明确。

编辑:

当我删除 SqlParameterCollection 参数前面的“this”关键字,使该方法成为普通静态方法而不是扩展方法时,一切正常。此外,我查看了整个解决方案(使用 Ctrl+Shift+F)以查找所有出现的“AddWithNullableValues”关键字,搜索结果如下:方法的签名和我调用它的代码中的两个位置。然后我什至创建了一个全新的静态类,添加了具有完全不同名称和相同主体的相同方法,但在调用它时仍然出现相同的错误,所以问题一定出在其他地方。

最后,我需要另一种扩展方法,当我在我的代码中调用它时,我得到了同样的错误。

public static Nullable<T> GetNullableValue<T>(this SqlDataReader sqlDataReader, string columnName) where T : struct
{
    int columnIndex = sqlDataReader.GetOrdinal(columnName);

    Nullable<T> value = null;

    if (!sqlDataReader.IsDBNull(columnIndex))
    {
        value = (Nullable<T>)sqlDataReader.GetValue(columnIndex);
    }

    return value;
}

在我看来,该解决方案在扩展方法方面存在一些问题,我不知道为什么。我成功构建了几次,尝试清理它 - 一切正常,直到我尝试将扩展方法用作扩展方法,而不是静态方法。

最佳答案

当 Visual Studio 将项目引用到自身时,类似的事情发生在我身上(不知道为什么)。我能够通过简单地删除无意义的引用来解决它。

关于c# - 当只有一个具有给定名称的方法时,Visual Studio 指出存在不明确的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24130625/

相关文章:

c# - 在 ElasticSearch 中使用 Bulk.IndexMany 指定 _id 字段

c# - Kernel32.dll 中的 CreateFile 不允许我打开物理磁盘

c# - 如何在 Windows Universal App 中使用双工 wcf 服务

c# - 通过 Windows Phone 访问 WCF 服务

c++ - C++ try语句不适用于 “#include”

c# - 我用什么事件来触发 XAML (Xamarin Forms) 中的 mousedown 之类的事件

ios - 处理 ios 实时客户端-服务器通信的最佳方法是什么?

compilation - 获取 key 错误 : 'project' when try to run apportable load command

java - 如何在没有 IDE 的情况下编译和运行 Intellij IDEA java 项目?

c# - 如何设置自定义类的反射数组的行