2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
你的例子看起來(lái)有點(diǎn)不一致,但如果你寫(xiě)的是一般的東西,它應(yīng)該看起來(lái)更像這樣:
public void DoSomething<T>(string someString, Func<T, bool> someMethod)
{
T a;
someMethod(a);
}
請(qǐng)注意,不是使用if在類(lèi)型之間進(jìn)行選擇,然后將類(lèi)型聲明為 astring或string[],而是簡(jiǎn)單地將類(lèi)型聲明為T(mén),它會(huì)在編譯代碼時(shí)被替換,以便它適用于函數(shù)。
當(dāng)您發(fā)現(xiàn)自己使用ifor在類(lèi)型之間進(jìn)行選擇時(shí)switch case,您可能不需要通用解決方案;事實(shí)上,這個(gè)邏輯根本不是通用的。它是具體的。在這種情況下,只需編寫(xiě)兩個(gè)原型:
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);
}
這稱(chēng)為方法重載。編譯器將通過(guò)從提供的函數(shù)推斷類(lèi)型來(lái)自動(dòng)選擇具有正確參數(shù)的正確方法。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以通過(guò)反射實(shí)現(xiàn)它:
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 關(guān)注
- 243 瀏覽
添加回答
舉報(bào)