Warum kann ich LINQ to Objects nicht verwenden, wenn meine Klasse IEnumerableT mehrmals implementiert?

7

Ich habe ein interessantes Problem, bei dem eine Klasse von einer Klasse erbt, die IEnumerable implementiert, aber ich möchte auch, dass die Klasse IEnumerable für einen anderen Typ implementiert. Alles funktioniert mit Ausnahme von IEnumerable-Erweiterungsmethoden, was bedeutet, dass ich standardmäßig keine LINQ-Objekte für Objekte erstellen kann, ohne immer zuerst zu casten. Hat jemand irgendwelche Ideen neben ständig Casting?

%Vor%     
Daryl 24.06.2011, 19:09
quelle

5 Antworten

6

Eigentlich können Sie, aber Sie können nicht den Vorteil der generischen Typen-Inferenz nutzen, weil Ihre Klasse zwei IEnumerable<T> von zwei verschiedenen Typen implementiert und der Compiler nicht wissen kann, welchen Typ Sie verwenden möchten.

Sie können direkt angeben, wie:

%Vor%     
digEmAll 24.06.2011, 19:19
quelle
7

Ändern Sie Ihren Code in:

%Vor%     
Jakub Konecki 24.06.2011 19:19
quelle
4

Implementieren IEnumerable Multiple Time Confuses Compiler, der IEnumerable & lt; & gt; es sollte in Betracht ziehen.

%Vor%     
Akash Kava 24.06.2011 19:17
quelle
2

Sieht so aus, als ob Sie irgendwie stecken geblieben sind. Hier ist ein Vorschlag, um das Tippen zu reduzieren. Sie können eine Erweiterungsmethode für einige Ihrer häufig verwendeten IEnumerable & lt; & gt; Typen.

%Vor%     
agent-j 24.06.2011 19:19
quelle
0
  

public new IEnumerator GetEnumerator ()

Das new -Schlüsselwort in dieser Zeile blendet die GetEnumerator () -Methode aus, die von der Vehicle-Klasse geerbt wurde. Ich bin mir nicht sicher, ob das funktioniert, aber probieren Sie stattdessen eine explizite Schnittstellenimplementierung .

>     
Joel Coehoorn 24.06.2011 19:17
quelle

Tags und Links