當我試圖在一個Action委託使用參數...我可以在Action或Func代表中使用參數嗎?
private Action<string, params object[]> WriteToLogCallBack;
我收到這樣的設計時錯誤:
Invalid token 'params' in class, struct, or interface member declaration
任何幫助!
當我試圖在一個Action委託使用參數...我可以在Action或Func代表中使用參數嗎?
private Action<string, params object[]> WriteToLogCallBack;
我收到這樣的設計時錯誤:
Invalid token 'params' in class, struct, or interface member declaration
任何幫助!
這種解決方法如何?
private Action<string, object[]> writeToLogCallBack;
public void WriteToLogCallBack(string s, params object[] args)
{
if(writeToLogCallBack!=null)
writeToLogCallBack(s,args);
}
或者你可以定義自己的委託類型:
delegate void LogAction(string s, params object[] args);
你如何用lambda來稱呼它? – toddmo 2017-02-23 22:50:46
您可以在委託的實際聲明中使用params
,但不是一個類型的。 Action的泛型參數只是類型,而不是調用委託時要傳遞的實際參數。 params不是一種類型,它是一個關鍵字。
C#中不可能使用變量類型參數。
例如,這就是爲什麼Action<...>
,Func<...>
和Tuple<...>
有許多聲明的原因。不過,這將是一個有趣的功能。 C++ 0x has them。
不知道它會與泛型(與模板相對)有多好。 – CodesInChaos 2010-10-30 17:10:36
你可以試試這個。它允許任意數量的參數,並且如果傳遞了錯誤的數量或類型的參數,則會出現編譯時錯誤。
public delegate T ParamsAction<T>(params object[] oArgs);
public static T LogAction<T>(string s, ParamsAction<T> oCallback)
{
Log(s);
T result = oCallback();
return T;
}
Foo foo = LogAction<Foo>("Hello world.", aoArgs => GetFoo(1,"",'',1.1));
params不是一種類型,即你可以在類型定義中使用'ref'? – 2010-10-30 17:09:42