我有一個類,必須接受方法以調用它們以及執行其他執行。這些方法必須多次使用,對許多不同的用戶來說越簡單越好。動作和功能<T>沒有明確鑄造
爲了解決這個問題,我有兩個方法:
void Receive(Action func)
{
// Do some things.
func();
}
T Receive<T>(Func<T> func)
{
// Do some things.
return func();
}
(其實我有34種方法,以能夠接收任何不同的行動或FUNC。菜單中定義的)
然後,我想能夠通過任何方法作爲參數傳遞給接收功能,能夠做這樣的事情:
void Test()
{
Receive(A);
Receive(B);
}
void A()
{
}
int B()
{
return 0;
}
就像這樣,它給了我一個接收錯誤(B):
The call is ambiguous between the following methods or properties: 'Class1.Receive(System.Action)' and 'Class1.Receive<int>(System.Func<int>)'
好吧,簽名是一樣的(雖然沒有錯誤顯示,如果我不使用的方法)。
如果我刪除接收(行動)的方法,我得到接收(A)以下錯誤:
The type arguments for method 'Class1.Receive<T>(System.Func<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
但我在這種情況下類型爲void,並禁止使用它作爲一個通用的參數。
那麼,有沒有辦法讓我的接收方法沒有使用任何明確的行動或Func轉換?
有了這個,如果我有一個方法,例如,四個參數我還要做一個演員和包括所有的人。例如:接收<列表,字符串,int,int>(C,myObject1,string1,int1,int2) –
Alfort
2012-07-11 17:03:30
這不是真的在這種情況下鑄造(一切都發生在編譯時),但我明白你的意思。你確定你需要這種通用的方法嗎? – 2012-07-11 17:08:29
是的,它是一個通用類,必須能夠接受任何類型的方法。 – Alfort 2012-07-12 07:23:59