2 回答

TA貢獻1824條經驗 獲得超5個贊
你的例子看起來有點不一致,但如果你寫的是一般的東西,它應該看起來更像這樣:
public void DoSomething<T>(string someString, Func<T, bool> someMethod)
{
T a;
someMethod(a);
}
請注意,不是使用if在類型之間進行選擇,然后將類型聲明為 astring或string[],而是簡單地將類型聲明為T,它會在編譯代碼時被替換,以便它適用于函數。
當您發現自己使用ifor在類型之間進行選擇時switch case,您可能不需要通用解決方案;事實上,這個邏輯根本不是通用的。它是具體的。在這種情況下,只需編寫兩個原型:
public void DoSomething(string someString, Func<string, bool> someMethod)
{
string A;
bool resultA = someMethod(A);
}
public void DoSomething(string someString, Func<string[], bool> someMethod)
{
string[] A;
bool resultA = someMethod(A);
}
這稱為方法重載。編譯器將通過從提供的函數推斷類型來自動選擇具有正確參數的正確方法。

TA貢獻1851條經驗 獲得超4個贊
您可以通過反射實現它:
public void DoSomething<T>(string someString, Func<T, bool> someMethod)
{
var args = new Dictionary<Type, object>
{
[typeof(string)] = "string", //string A;
[typeof(string[])] = new[] { "string" }, //string[] B;
};
var arg = args[typeof(T)];
var result = (bool)someMethod.Method.Invoke(someMethod.Target, new[] { arg });
}
用法:
DoSomething<string>("abc", someMethod);
DoSomething<string[]>("abc", someMethod);
- 2 回答
- 0 關注
- 242 瀏覽
添加回答
舉報