Gibt es eine einfache Möglichkeit zum analysieren eines (lambda-Ausdruck) string in ein Action-Delegaten?

Habe ich eine Methode, welche ein "Konto" - Objekt basierend auf dem action-Delegaten übergeben:

public static void AlterAccount(string AccountID, Action<Account> AccountAction) {
  Account someAccount = accountRepository.GetAccount(AccountID);
  AccountAction.Invoke(someAccount);
  someAccount.Save();
}

Dieser funktioniert wie vorgesehen...

AlterAccount("Account1234", a => a.Enabled = false);

...aber was nun, würde ich mag, um zu versuchen und tun, ist eine Methode, wie diese:

public static void AlterAccount(string AccountID, string AccountActionText) {
  Account someAccount = accountRepository.GetAccount(AccountID);
  Action<Account> AccountAction = MagicLibrary.ConvertMagically<Action<Account>>(AccountActionText);
  AccountAction.Invoke(someAccount);
  someAccount.Save();
}

Kann dann verwendet werden wie:

AlterAccount("Account1234", "a => a.Enabled = false");

deaktivieren Konto "Account1234".

Hatte, habe ich einen Blick auf die linq dynamic query library, die scheint, zu tun mehr oder weniger was ich will, aber für die Func-type-Delegierten, und mein wissen von Expression trees, etc ist nicht ganz gut genug, um herauszufinden, wie Sie das erreichen, was ich will.

Gibt es einen einfachen Weg das zu tun, was ich will, oder muss ich das lernen richtig Ausdrücken und schreiben Sie eine Last von code?

(Der Grund, warum ich dies tun wollen, ist es, eine einfache Möglichkeit, bulk-Aktualisierung der Konto-Objekte aus einem powershell-Skript, in dem der Benutzer angeben kann wird ein lambda-Ausdruck, führen Sie die änderungen.)

der harte Weg wäre die Nutzung von System.Reflexion.Aussenden.DynamicMethod-und IL-code generieren. in diesem Fall ist aber es kann nur leichter zu akzeptieren, eine syntax, die angibt, der name einer Eigenschaft und einem Wert, und haben eine Reflexion-Basen-Eigenschaft setter.
Ja, hab ich schon gedacht, aber ich glaube, das würde ausschließen, einige potentiell wichtige Dinge, wie zum Beispiel das call-AlterAccount("Account1234", "a=>ein.Enabled = !ein.Aktiviert"); (nicht sicher, warum Sie wollen würde, um zu tun, speziell, aber es gibt andere sinnvollere Beispiele)
Ich hatte ein gutes lachen, Lesen: MagicLibrary.ConvertMagically

InformationsquelleAutor Whisk | 2009-04-03

Schreibe einen Kommentar