我想弄清楚为什么会这样,但我做不到。我有一个 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/