代码调用一个与自身不明确的方法?

时间:2014-02-20 22:37:53

标签: c# c#-4.0

我有一行代码如下:

var results = new GroupedCountsModel { XAxis = entities.ListGroupKeys(fieldNameX) };

当我尝试编译此代码时,出现构建错误:

The call is ambiguous between the following methods or properties: 
'MyProject.Shared.QueryGeneration.GroupByHelper.ListGroupKeys<TEntity>(System.Linq.IQueryable<TEntity>, string)' 
and 
'MyProject.Shared.QueryGeneration.GroupByHelper.ListGroupKeys<TEntity>(System.Linq.IQueryable<TEntity>, string)'    
C:\{mypath}\MyProject.Shared\Controllers\BaseEntityController.cs

这很有趣,因为错误中列出的两种方法完全相同。它不像我在不同的命名空间或程序集中定义相同的方法签名。我不知道为什么当编译器本身指向同一个方法两次时编译器认为它们是不同的。这是方法:

public static class GroupByHelper
{
    public static List<object> ListGroupKeys<TEntity>(this IQueryable<TEntity> source, string fieldName)
        where TEntity : class, IDataEntity
    {
        //...etc...
    }
    //...etc..
}

可能导致这种情况的原因是什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

所以这很奇怪。我不确定这是怎么发生的。

我一直在重构一个解决方案。已重新评估启动项目中的某些名称空间和类,并决定将它们移动到MyProject.Shared类库中。不知何故,在重构过程中,MyProject.Shared项目最终引用自身。我不记得自己添加这个引用,虽然现在一切皆有可能:-)我确实使用了一些第三方工具,旨在围绕解决方案无缝地移动命名空间和类,所以也许这就是引用的来源。或者我可能在解决方案资源管理器中感到困惑,并添加了对自身的引用而不是启动项目。 IDK的。

从MyProject.Shared中删除对MyProject.Shared的引用后,解决方案正常编译。

感谢那些建议我检查引用的程序集及其版本的人。这就是我注意到自我引用的原因。