首先,对于过多的通用名称类感到抱歉。我的雇主很偏执,我确信他在这个网站上漫游。好的,所以我有这个代码:
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = otherEntity.OneCollection.ElementAt(0) as MyBarClass
}
其中 otherEntity.OneCollection 是一个 ISet。ISet 是一个实现 IEnumerable 的 NHibernate 集合类。如果我尝试编译此代码,则会收到此错误:
Error 2 The call is ambiguous between the following methods or properties:
'System.Linq.Enumerable.ElementAt<MyFirm.Blah.Blah.ClassyClass> (System.Collections.Generic.IEnumerable<MyFirm.Blah.Blah.ClassyClass>, int)'
and
'System.Linq.Enumerable.ElementAt<MyFirm.Blah.Blah.ClassyClass>(System.Collections.Generic.IEnumerable<MyFirm.Blah.Blah.ClassyClass>, int)'
但是,如果我在类的开头删除 using System.Linq 并将代码更改为:
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = System.Linq.Enumerable
.ElementAt(otherEntity.OneCollection, 0) as MyBarClass
}
它编译并工作。(?运算符检查 OneCollection 是否为清楚起见删除了元素)
谁能向我解释这个错误?
万一相关:我使用的是 Visual Studio 2008,以 .NET Framework 3.5 为目标并使用 ReSharper 5.1。
NOTE.- 编辑以澄清集合是哪个具体的 IEnumerable,对此感到抱歉。