Func<a, out b, bool>
,只是不編譯,如何聲明,我想第二個參數是一個out
?如何聲明一個泛型委託具有out參數
我想用這樣的:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
Func<a, out b, bool>
,只是不編譯,如何聲明,我想第二個參數是一個out
?如何聲明一個泛型委託具有out參數
我想用這樣的:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
其實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)
你需要讓自己的委託類型,像這樣:
delegate bool MyFunc(Type1 a, out Type2 b);
你可能要重新考慮你的設計。你真的需要通過添加一個out參數來使你的代碼複雜化嗎?
你可以用的布爾返回類型和第二輸出類型在自己的班級(或.NET 4.0元組),並把它作爲一個返回類型:
public Func<Type1, Tuple<Type2, bool>> DetectMethod;
當然,當你想使用代表們引用嘗試,分析方法,你是在正確的軌道上,你需要定義一個新的委託爲他人已經描述。
這也比用ref或out參數自定義委託的更多LINQ友好。 – Libor 2016-07-26 08:49:38
這是唯一的辦法? – Benny 2010-03-15 14:59:10
是的。通用的'Func'委託是常規的泛型類型,它們採用常規的類型參數。 '出來b'不是一種類型。 – SLaks 2010-03-15 15:00:45