私はそれに渡されるアクションデリゲートに基づいて「アカウント」オブジェクトを変更する方法があります:アクションデリゲートに(ラムダ式)文字列を解析する簡単な方法はありますか?
AlterAccount("Account1234", a => a.Enabled = false);
...意図したとおり、この作品
public static void AlterAccount(string AccountID, Action<Account> AccountAction) {
Account someAccount = accountRepository.GetAccount(AccountID);
AccountAction.Invoke(someAccount);
someAccount.Save();
}
...しかし、今どのようなI 「試してみて、やりたいDこのようなメソッドを持っている:
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();
}
それは、その後のように使用することができます。
AlterAccount("Account1234", "a => a.Enabled = false");
アカウント「Account1234」を無効にします。
linq dynamic query libraryを見てきましたが、多かれ少なかれ、Funcタイプの代理人のためにやっているようですが、私の表現木などの知識は、どのように達成するために十分なものではありませんが欲しいです。
私は欲しいものを簡単に行う方法がありますか、または表現を正しく学習してコードを読み込む必要がありますか?
(私はこれをしたい理由は、ユーザーが変更を実行するためにラムダ式を指定することができますPowerShellのスクリプトから一括更新アカウントオブジェクトの簡単な方法を可能にすることです。)
ハードな方法はSystem.Reflection.Emit.DynamicMethodを使用し、ILコードを生成することであろう。しかし、この場合は、プロパティ名と値を指定し、リフレクションベースのプロパティセッターを持つ構文を受け入れる方が簡単かもしれません。 – eulerfx
はい、私はそれを考えましたが、AlterAccount( "Account1234"、 "a => a.Enabled =!a.Enabled")を呼び出すことができるような、潜在的に強力なものを除外すると思います。 (なぜそれを具体的にしたいのか分かりませんが、他のより賢明な例があります) – Whisk
私はこれを読んで良い笑いを持っていました: 'MagicLibrary.ConvertMagically' –