Các Func
gia đình của các đại biểu (hoặc Action
cho rằng vấn đề) là gì, nhưng loại đại biểu đơn giản tuyên bố như
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
v.v ... Các đại biểu như vậy có thể có các tham số out / ref, vì vậy trong trường hợp của bạn, vấn đề chỉ là tự thực hiện tùy chỉnh như các câu trả lời khác đã chỉ ra. Về lý do tại sao Microsoft không đóng gói này theo mặc định, hãy nghĩ về số lượng kết hợp tuyệt đối mà nó sẽ yêu cầu.
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
chỉ cho hai tham số. Chúng tôi thậm chí không chạm vào ref
. Nó thực sự sẽ cồng kềnh và khó hiểu cho các nhà phát triển.
T
là chống chỉ định vàV
là covariant. Tuy nhiên, vì một tham số (output
) của loạiU
được truyền bằng tham chiếu ,U
không thể được đánh dấu co-hoặc contravariant và phải duy trì "bất biến". Vì vậy, hãy xem xétpublic delegate V MyDelegate<in T, U, out V>(T input, out U output);
nếu bạn sử dụng C # 4 trở lên.