Các Funcgia đình của các đại biểu (hoặc Actioncho 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.
               
              
Tlà chống chỉ định vàVlà covariant. Tuy nhiên, vì một tham số (output) của loạiUđược truyền bằng tham chiếu ,Ukhô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.