Tôi nghĩ, những gì bạn đang tìm kiếm không tồn tại. Gần nhất bạn có thể có là thông số:
MyMethod(params object[] args)
{
// if you have to do this, it's quite bad:
int intArg = (int)args[0];
string stringArg = (string)arg[1]:
}
// call with any number (and type) of argument
MyMethod(7, "tr");
Không có cách kiểm tra loại thời gian biên dịch và do đó không phải là cách xử lý tất cả các mục đích. Nhưng nếu đối số của bạn là động, đây có thể là giải pháp.
Edit: có một ý tưởng:
Bạn cần phải đặt tất cả các tham số bằng tay vào một danh sách/từ điển. Bạn có thể viết một lớp helper để cho phép như sau:
MyMethod(int arg1, string arg2)
{
Arguments.Add(() => arg1);
Arguments.Add(() => arg2);
//
}
Các helper trông giống như
public static void Add<T>(Expression<Func<T>> expr)
{
// run the expression to get the argument value
object value = expr.Compile()();
// get the argument name from the expression
string argumentName = ((MemberExpression)expr.Body).Member.Name;
// add it to some list:
argumentsDic.Add(argumentName, value);
}
Nguồn
2009-05-07 08:42:20
Vâng. Bạn sẽ không nhận được chúng. Bạn sẽ chỉ nhận được tên tham số. Vì vậy, tôi nghĩ rằng sẽ không làm việc. – Kirtan
@Robin: bạn có thấy triển khai của tôi để thêm đối số vào từ điển dễ dàng không? Tôi đã chỉnh sửa câu trả lời của mình. Là hữu ích không? –