2010-03-15 67 views

回答

28

其實Func鍵只是在.NET中聲明的簡單的委託框架。其實有幾個Func鍵代表宣稱有:

delegate TResult Func<TResult>() 
delegate TResult Func<T, TResult>(T obj) 
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2) 
delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3) 
delegate TResult Func<T1, T2, T3, T4, TResult>(T1 obj1, T2 obj2, T3 obj3, T4 obj4) 

所以你能做的唯一一件事就是聲明你的自定義委託:

delegate bool MyFunc<T1, T2>(T1 a, out T2 b) 
6

你需要讓自己的委託類型,像這樣:

delegate bool MyFunc(Type1 a, out Type2 b); 
+0

這是唯一的辦法? – Benny 2010-03-15 14:59:10

+0

是的。通用的'Func'委託是常規的泛型類型,它們採用常規的類型參數。 '出來b'不是一種類型。 – SLaks 2010-03-15 15:00:45

5

你可能要重新考慮你的設計。你真的需要通過添加一個out參數來使你的代碼複雜化嗎?

你可以用的布爾返回類型和第二輸出類型在自己的班級(或.NET 4.0元組),並把它作爲一個返回類型:

public Func<Type1, Tuple<Type2, bool>> DetectMethod; 

當然,當你想使用代表們引用嘗試,分析方法,你是在正確的軌道上,你需要定義一個新的委託爲他人已經描述。

+0

這也比用ref或out參數自定義委託的更多LINQ友好。 – Libor 2016-07-26 08:49:38