2014-02-20 18 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的引用,那麼解決方案通常會編譯。

感謝那些建議我檢查引用程序集及其版本的人。這就是讓我注意到自我參照的原因。

相關問題