Heim > Backend-Entwicklung > C++ > Wie kann ich eine C#-Funktion in einen Ausdruck konvertieren?

Wie kann ich eine C#-Funktion in einen Ausdruck konvertieren?

Barbara Streisand
Freigeben: 2025-01-03 09:25:39
Original
946 Leute haben es durchsucht

How Can I Convert a C# Func to an Expression?

Konvertieren von C# Func to Expression>

In C# bieten Lambda-Ausdrücke eine praktische Möglichkeit, einfache Funktionen darzustellen. Während es unkompliziert ist, ein Lambda in einen Ausdruck umzuwandeln> Bei Verwendung eines Methodenaufrufs kann es Szenarien geben, in denen die Konvertierung eines Func direkt in einen Ausdruck gewünscht.

Die Herausforderung

Eine solche direkte Konvertierung ist jedoch aufgrund eines Fehlers bei der Kompilierung nicht möglich, wie im folgenden Code dargestellt :

public void ContainTheDanger(Func<T> dangerousCall)
{
    try
    {
        dangerousCall();
    }
    catch (Exception e)
    {
        // This next line does not work...
        Expression<Func<T>> DangerousExpression = dangerousCall;
        var nameOfDanger = ((MemberExpression)dangerousCall.Body).Member.Name;
        throw new DangerContainer("Danger manifested while " + nameOfDanger, e);
    }
}
Nach dem Login kopieren

Der Fehler rührt daher, dass Func stellt eher einen generischen Delegaten als einen Ausdruck dar.

Einschränkungen

Leider gibt es keinen einfachen Weg, die gewünschte Konvertierung zu erreichen. Der Versuch, den ursprünglichen Ausdruck von einem Func zu erhalten könnte sich aufgrund von Optimierungen und Datenverlusten während der Kompilierung als undurchführbar erweisen.

Alternative Ansätze

Als Alternative kann man Folgendes in Betracht ziehen:

  • Verwenden Reflexion zur Überprüfung des Func und den beabsichtigten Ausdruck ableiten.
  • Verwendung eines benutzerdefinierten Ausdruckscompilers oder eines dynamischen Objektmodells, um einen Ausdrucksbaum basierend auf Func zu erstellen.

Diese Ansätze sind jedoch typischerweise komplex und fehleranfällige Techniken.

Fazit

Konvertieren a Func zu einem Ausdruck> direkt ist in C# von Natur aus eine Herausforderung. Alternative Ansätze können auf Kosten erhöhter Komplexität und potenzieller Einschränkungen untersucht werden.

Das obige ist der detaillierte Inhalt vonWie kann ich eine C#-Funktion in einen Ausdruck konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage