我需要更多地瞭解代表和C#語言設計。如何獲取委託調用的結果列表?
讓說,我有一個MulticastDelegate
實現泛型委託幷包含幾個電話:
Func<int> func = null;
func += ()=> return 8;
func +=() => return 16;
func +=() => return 32;
現在,這個代碼將返回32:
int x = func(); // x=32
我想知道是否有存在(或者更好,我應該問爲什麼它不存在!)使用哪種C#語言功能可以訪問所有委託調用的結果,這意味着獲取列表({8,16,32})?
當然,使用.NET框架例程也可以做到這一點。這樣的事情會做的工作:
public static List<TOut> InvokeToList<TOut>(this Func<TOut> func)
{
var returnValue = new List<TOut>();
if (func != null)
{
var invocations = func.GetInvocationList();
returnValue.AddRange(invocations.Select(@delegate => ((Func<TOut>) @delegate)()));
}
return returnValue;
}
但我不能從系統中應該有更好的方式,至少在沒有鑄造出去(真的,爲什麼MulticastDelegate是不通用的,當代表們)?
「真的,爲什麼MulticastDelegate是不通用的,當代表們」,因爲1.1 MulticastDelegate已經在框架中,這意味着當它被編碼有不提供任何仿製藥。 – Will