Zunächst einmal, Entschuldigung für exzessive generische Klassen. Mein Arbeitgeber ist paranoid und ich weiß sicher, dass er diese Seite durchstreift. Ok, so habe ich diesen Code:Call ist mehrdeutiger Fehler mit Linq
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = otherEntity.OneCollection.ElementAt(0) as MyBarClass
}
wo otherEntity.OneCollection ein ISet ist. ISet ist eine NHibernate-Auflistungsklasse, die IEnumerable implementiert. Wenn ich versuche, diesen Code zu kompilieren, bekomme ich diesen Fehler:
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)'
Aber wenn ich die Verwendung System.Linq am Anfang der Klasse entfernen und den Code dies ändern:
var fooObj = new MyFooClass()
{
fooField1 = MyEnum.Value3,
fooField2 = false,
fooField3 = false,
fooField4 = System.Linq.Enumerable
.ElementAt(otherEntity.OneCollection, 0) as MyBarClass
}
es kompiliert und funktioniert. (? Operator, um zu überprüfen, ob OneCollection Elemente aus Gründen der Übersichtlichkeit entfernt hat)
Konnte mir jemand diesen Fehler erklären?
Falls relevant: Ich verwende Visual Studio 2008, Targeting für .NET Framework 3.5 und die Verwendung von ReSharper 5.1.
HINWEIS.- Edited, um zu klären, welche konkrete IEnumerable ist die Sammlung, sorry dafür.
Sie haben anscheinend 2 Versionen von 'System.Linq.Enumerable' ' –
referenziert haben Sie eine Lösung gefunden? Was war das Problem? Ich bin wirklich neugierig, denn das ist eher selten Problem – quetzalcoatl
Ja. Ich konnte den redundanten Verweis von System.Linq.Enumerable nicht vollständig finden, aber ich konnte das tun, was ich in der ursprünglichen Frage erwähnt habe, anstatt ElementAt als eine Erweiterungsmethode aufzurufen, ich nenne es wie eine normale Methode, die es verwendet vollständiger Namespace, dh: System.Linq.Enumerable.ElementAt (collection, index) anstelle der viel netteren und lesbareren collection.ElementAt (index). – CMPerez