나는 그것으로 전달 된 액션 위임을 기반으로 "계정"개체를 변경하는 방법이 있습니다(lambda expression) 문자열을 Action 대리자로 파싱하는 쉬운 방법이 있습니까?
public static void AlterAccount(string AccountID, Action<Account> AccountAction) {
Account someAccount = accountRepository.GetAccount(AccountID);
AccountAction.Invoke(someAccount);
someAccount.Save();
}
을이 작품 의도 한대로 ...
AlterAccount("Account1234", a => a.Enabled = false);
...하지만 지금은 내가 '시도 좋아하고 어떻게이 같은 방법이있다 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' –