Tôi có một phương pháp làm thay đổi một "Tài khoản" đối tượng dựa trên các đại biểu hành động thông qua vào nó:Có cách nào dễ dàng để phân tích một chuỗi (biểu thức lambda) thành một đại biểu Action?
public static void AlterAccount(string AccountID, Action<Account> AccountAction) {
Account someAccount = accountRepository.GetAccount(AccountID);
AccountAction.Invoke(someAccount);
someAccount.Save();
}
này hoạt động như dự định ...
AlterAccount("Account1234", a => a.Enabled = false);
... nhưng bây giờ những gì tôi 'muốn cố gắng và làm là có một phương pháp như thế này:
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();
}
sau đó nó có thể được sử dụng như:
AlterAccount("Account1234", "a => a.Enabled = false");
để vô hiệu hóa tài khoản "Account1234".
Tôi đã xem linq dynamic query library, dường như làm nhiều hơn hoặc ít hơn những gì tôi muốn nhưng đối với đại biểu loại Func, và kiến thức về cây biểu hiện của tôi vv không đủ tốt để tìm hiểu cách đạt được Tôi muốn.
Có cách nào dễ dàng để làm những gì tôi muốn hay tôi cần học biểu thức đúng cách và viết mã tải không?
(Lý do tôi muốn làm điều này là để cho phép một cách dễ dàng của các đối tượng tài khoản hàng loạt cập nhật từ một kịch bản PowerShell nơi người dùng có thể chỉ định một biểu thức lambda để thực hiện các thay đổi.)
cách cứng sẽ được sử dụng System.Reflection.Emit.DynamicMethod và tạo ra mã IL. tuy nhiên, trong trường hợp này, có thể dễ dàng chấp nhận cú pháp chỉ định một tên thuộc tính và một giá trị, và có một bộ thuộc tính cơ sở phản chiếu. – eulerfx
Vâng, tôi đã nghĩ về điều đó, nhưng tôi nghĩ rằng sẽ loại trừ một số thứ có khả năng mạnh mẽ, như có thể gọi AlterAccount ("Account1234", "a => a.Enabled =! A.Enabled"); (không chắc chắn lý do tại sao bạn muốn làm điều đó đặc biệt, nhưng có những ví dụ hợp lý hơn) – Whisk
Tôi đã có một tiếng cười tốt đọc này: 'MagicLibrary.ConvertMagically' –