Có thể chuyển tên mạnh của phương thức dưới dạng biểu thức lambda mà không cung cấp tham số và/hoặc dấu ngoặc đơn không?Sử dụng phương pháp gõ mạnh làm đối số mà không chỉ định tham số
Ví dụ, nếu tôi có phương pháp sau:
public class CalleeClass
{
public void MethodA(obj param1, obj param2)
{
...
}
}
Tôi muốn gọi phương pháp này ở những nơi khác qua:
return new MyClass<CalleeClass>(c => c.MethodA); //Note: no()'s or arguments
đâu MyClass sẽ chịu trách nhiệm cho, nói, MVC định tuyến bằng cách sử dụng tên phương thức làm đích. Mục đích ở đây là chúng ta muốn có thể sử dụng các khung nhìn mạnh mẽ được gõ thông qua các phương thức điều khiển và tôi không muốn phải cung cấp các tham số "câm" mà không được sử dụng.
Hiện tại, tôi đang sử dụng mã tương tự như sau để sử dụng tên phương thức, nhưng kiểu này vẫn yêu cầu truyền trong đối số giả và/hoặc dấu ngoặc đơn.
public void MyClass<T>(Expression<Action<T>> action)
{
var methodName = (action.Body as MethodCallExpression).Method.Name;
}
EDIT: Xin lỗi vì sự nhầm lẫn, nhưng tôi ban đầu đã cố gắng để đơn giản hóa vấn đề bằng cách chỉ bao gồm những gì tôi nghĩ bạn cần, và khi làm như vậy bỏ qua một số thông tin quan trọng. Mục tiêu cuối cùng ở đây là có MyClass nhận được một kiểu chung chung + biểu thức lambda, và biểu thức lambda có thể truyền vào tên phương thức gõ mạnh mà không tạo ra một đối tượng. -MB
Bạn không thể đặt thông số tùy chọn? Ngoài ra: MethodCallExpression sẽ không hoạt động trừ khi nó có dấu ngoặc đơn tôi khá chắc chắn. – chemicalNova
Các thông số không câm; chúng được sử dụng bởi trình biên dịch ... –
Không vi phạm các tham số, nhưng chúng ta chỉ cần tên phương thức để định tuyến, và có vẻ lạ để tạo ấn tượng rằng chúng ta đang khởi tạo một đối tượng.Tôi không tin điều này thậm chí có thể, đó là lý do tại sao tôi đến đây. :) –