2009-01-03 4 views

Antwort

16

Delphi 2009 hat Generika, Klasse Helfer und anonyme Methode Unterstützung, aber nicht Lambda, Erweiterungsmethoden oder Typinferenz. Lambda-Ausdrücke kommen wahrscheinlich in einer zukünftigen Version von Delphi, aber sie sind noch nicht auf der offiziellen Straßenkarte (ein neuer sollte hoffentlich bald kommen). Auch Delphi für Win32 hat keinen Zugriff auf alle LINQ-Bibliotheken.

Also die kurze Antwort ist NEIN, Sie können LINQ in Win32 Delphi nicht tun. Sie können jedoch einige ähnliche Dinge tun, und Sie können technisch sogar auf LINQ über COM zugreifen (wie Sie mit allen .NET-Klassen können), aber es würde den Punkt ohne die coole LINQ-Syntax irgendwie besiegen.

LINQ ist wirklich eine .NET-Technologie. Während Delphi höchstwahrscheinlich die Sprachfunktionen entwickelt, die LINQ ermöglichen, sind die zugrunde liegenden .NET-Bibliotheken nur für die .NET-Entwicklung geeignet.

Ich würde vorschlagen, RemObject Data Abstract oder ähnliches zu verwenden.

+0

Umm ... sind keine Erweiterungsmethoden und Klassenhelfer zwei Namen für genau dasselbe? Der einzige Unterschied ist, dass einer von ihnen in Delphi verwendet wird und der andere in C# verwendet wird, oder gibt es einige kritische Funktionen, die ich übersehen habe? –

+0

Klassenhelfer werden nur auf eine Klasse angewendet. Erweiterungsmethoden sind ein wenig breiter. Sie sind sehr ähnlich, und Sie könnten es wahrscheinlich mit Klassenhelfern tun, aber es würde mehr Code erfordern. –

3

Ja und Nein LINQ kann wirklich als zwei verschiedene Elemente gedacht werden.

Die erste ist die SQL-ähnliche Abfragesyntax. Damit können Sie in C# Folgendes schreiben.

var query = from it in "foobar" select Char.ToUpper(it); 

Damit Delphi diese Version von LINQ verwenden kann, muss explizite Syntaxunterstützung hinzugefügt werden. AFAIK das gibt es nicht.

Unter dem Dach jedoch werden alle LINQ-Abfragen in eine Reihe von Abfrageausdrücken übersetzt. Diese beinhalten typischerweise eine starke Verwendung von Lambda-Ausdrücken und -Verschlüssen. Der obige Code entspricht der folgenden Nicht-SQL-Syntaxversion.

var query = "foobar".Select(x => Char.ToUpper(x)); 

Ich weiß nicht, das Niveau des Lambdas oder delegieren Unterstützung in Delphi, aber es sollte möglich sein, LINQ von Delphi in dieser Methode zuzugreifen.

+2

- Sie haben einen kleinen Fehler, müssen Sie "es" durch "x" ersetzen. Delphi Win32 fehlt fast jede Eigenschaft, die das zweite Beispiel funktioniert. Es gibt kein VAR. string und char sind keine Objekte, und Sie haben nicht die kurzen Syntax-Lamda-Ausdrücke. Also wenn Sie es tun können, wäre es viel hässlicher. –

+0

@mliesen, danke den Tippfehler behoben. – JaredPar

1

Ich weiß nicht, in welcher Version von Delphi es erschien, aber in XE haben wir 'Objektfunktionen', die als Verschlüsse oder fast gleiche Lambda-Ausdrücke gemacht werden können.

So, heute (26/06/2011) ist es in der Nähe von möglich, LINQ-ähnliche Ausdrücke in Delphi (die zweite Form) zu haben.

+2

Was meinst du mit "Objektfunktionen"? –