Hinzufügen von LINQ zu meinen Klassen

7

Ich möchte meine Apple-Eigenschaftsliste (Eigenschaftsliste) -Parser (binary, JSON und XML) um LINQ-Unterstützung erweitern ), damit ich SQL-ähnliche Abfragen verwenden kann, wie Sie es mit System.Xml können. Es funktioniert, indem die Datei vollständig analysiert und auf dem Heap gespeichert wird. (wie System.Xml ).

Ich habe gegoogelt und kann anscheinend nichts davon verstehen (ich bekomme viele Using LINQ to SQL Classes Seiten). Die Anleitung auf MSDN verstehe ich auch nicht. Was muss ich tun?

    
Cole Johnson 17.06.2012, 02:51
quelle

3 Antworten

17

Das Implementieren von LINQ bedeutet einfach die Implementierung der Methoden, die LINQ erwartet, z. B. Where oder Select , mit den richtigen Signaturen. Trotz der allgemeinen Wahrnehmung müssen Sie die Schnittstelle IEnumerable für Ihre Klasse nicht implementieren, um LINQ zu unterstützen. Durch die Implementierung von IEnumerable wird automatisch jedoch die gesamte Menge an LINQ-Methoden in der Klasse Enumerable fast kostenlos erhalten - Sie müssen nur GetEnumerator und eine IEnumerator -Klasse implementieren.

Es gibt ein paar Beispiele dafür, wie man IEnumerable in meinem Blog implementiert, in diesem Post über das Iterator-Muster .

Wenn es jedoch nicht sinnvoll ist, dass Ihre Klasse aufzählbar ist, müssen Sie dies nicht tun. Sie müssen nur die entsprechenden LINQ-Methoden direkt implementieren. LINQ kümmert sich nicht wirklich darum, wie die Methoden definiert werden, solange das C # kompiliert wird. Das heißt, wenn Sie schreiben:

%Vor%

Der C # -Compiler übersetzt dies in:

%Vor%

Solange das kompiliert wird, wird LINQ funktionieren. Sehen Sie sich die Liste der LINQ-Abfragemethoden an, um die richtigen Signaturen für die Methoden anzuzeigen. Zum Beispiel (angenommen, dass Ihre PList eine Liste von PListItem s war):

%Vor%

Wenn Sie LINQ direkt auf diese Weise implementieren, erhalten Sie viel mehr Kontrolle darüber, wie es sich verhält, es ist viel viel mehr, um es richtig zu machen, und Sie müssen die Implikationen Ihrer Rückgabewerte verstehen. und Verkettung von LINQ-Aufrufen, etc. Im Allgemeinen, wenn Sie damit kommen können, dass Ihre Klasse IEnumerable implementiert und C # die ganze Arbeit für Sie erledigen lässt, werden die Dinge viel einfacher.

    
Michael Edenfield 17.06.2012, 03:23
quelle
1

Sie müssen zuerst IEnumerable implementieren. Lies das zuerst - Ссылка

    
Arman Hayots 17.06.2012 03:04
quelle
1

Da LINQ to objects mit jeder Klasse arbeitet, die von IEnumerable<t> erbt, indem Sie diese Schnittstelle in Ihrer Klasse erben, sollte die Methode GetEnumerable ausreichen.

Der folgende Link erläutert, wie die IEnumerable-Schnittstelle implementiert wird (obwohl LINQ nicht erwähnt wird, wird es funktionieren): Ссылка

    
Brenton 17.06.2012 02:57
quelle

Tags und Links