Existe-t-il un moyen simple d’analyser une chaîne (expression lambda) dans un délégué d’action?

.net c# expression-trees linq parsing

Question

J'ai une méthode qui modifie un objet "Compte" en fonction de l'action déléguée qui y est passée:

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

Cela fonctionne comme prévu ...

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

... mais maintenant, j'aimerais essayer une méthode comme celle-ci:

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

Il peut ensuite être utilisé comme:

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

désactiver le compte "Account1234".

J'ai jeté un coup d'œil à la bibliothèque de requêtes dynamiques linq , qui semble faire plus ou moins ce que je veux, mais pour les délégués de type Func, et ma connaissance des arbres d'expression, etc., n'est pas assez bonne vouloir.

Existe-t-il un moyen simple de faire ce que je veux ou dois-je bien apprendre les expressions et écrire une charge de code?

(La raison pour laquelle je souhaite procéder est de permettre un moyen facile de mettre à jour en masse des objets de compte à partir d'un script PowerShell où l'utilisateur peut spécifier une expression lambda pour effectuer les modifications.)

Réponse populaire

Vous pouvez essayer ceci: Expressions Lambda dynamiques utilisant un AppDomain isolé

Il compile une expression lambda à l'aide du compilateur CodeDOM. Afin de disposer de l'assembly en mémoire créé, le compilateur s'exécute sur un AppDomain isolé. Pour que l'expression passe par la limite du domaine, elle doit être sérialisée. Hélas, l' Expression<> n'est pas Serializable . Donc, un truc doit être utilisé. Tous les détails sont expliqués dans le post.

Je suis l'auteur de cette composante, au fait. J'aimerais beaucoup entendre vos commentaires.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi