2014-02-20 17 views
3

我有这样一行代码:代码调用一个与它本身不明确的方法?

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.. 
} 

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

+0

如果这是一个ASP.NET项目,那么请尝试清除临时ASP.NET文件,然后重新构建整个解决方案。可能有两个不同版本的临时程序集,导致两个具有相同确切名称和名称空间的不同类。 –

+2

尝试重新启动visual studio。 – cgTag

+0

是啊,我在想这是一个缓存或临时文件的问题。 – cgTag

回答

0

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

我一直在重构一个解决方案。启动项目中的一些名称空间和类已经过重新评估,并决定将它们移动到MyProject.Shared类库中。不知何故,在重构期间,MyProject.Shared项目最终引用了自身。我不记得自己添加这个引用,尽管在这一点上任何事情都是可能的:-)我确实使用了一些第三方工具来设计无缝移动名称空间和类的解决方案,所以也许这就是引用的来源。或者我可能在解决方案资源管理器中感到困惑,并将其引用添加到自身中,而不是添加到启动项目中。 IDK的。

一旦我从MyProject.Shared中删除对MyProject.Shared的引用,那么解决方案通常会编译。

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

相关问题