Wywołanie jest niejednoznacznym błędem przy użyciu Linq
Przede wszystkim przepraszam za ekscesywne ogólne klasy nazw. Mój pracodawca jest paranoikiem i wiem na pewno, że wędruje po tej stronie. Ok, więc mam ten kod:
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = otherEntity.OneCollection.ElementAt(0) as MyBarClass
}
gdzie otherEntity.OneCollection jest ISet. ISet to klasa kolekcji NHibernate, która implementuje IEnumerable. Jeśli spróbuję skompilować ten kod, otrzymuję ten błąd:
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)'
Ale jeśli usunę używanie System.Linq na początku klasy i zmienię kod na ten:
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = System.Linq.Enumerable
.ElementAt(otherEntity.OneCollection, 0) as MyBarClass
}
kompiluje się i działa. (? operator, aby sprawdzić, czy OneCollection ma elementy usunięte ze względu na przejrzystość)
Czy ktoś mógłby mi wyjaśnić ten błąd?
W przypadku, gdy jest to istotne: używam Visual Studio 2008, kierując do .NET Framework 3.5 i używając ReSharper 5.1.
UWAGA.- Edytowane w celu wyjaśnienia, który konkretnie IEnumerable jest zbiorem, przepraszam za to.