亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Func 中使用泛型類型參數,并使用特定類型調用 Func?

在 Func 中使用泛型類型參數,并使用特定類型調用 Func?

C#
素胚勾勒不出你 2021-10-09 19:47:05
我有以下方法在 aT中使用Func:public void DoSomething<T>(string someString, Func<T, bool> someMethod) {        if(someCondition)     {        string A;        bool resultA = someMethod(A);    }    else     {        string[] B;        bool resultB = someMethod(B);    }        // Some other stuff here ...}我正在DoSomething以下列方式調用該方法:DoSomething<string>("abc", someMethod);DoSomething<string[]>("abc", someMethod);并且 someMethod 存在,具有以下定義:bool someMethod(string simpleString);bool someMethod(string[] stringArray);現在編譯失敗,方法中出現以下錯誤DoSomething:cannot convert from 'string' to 'T'cannot convert from 'string[]' to 'T'我無法弄清楚問題是否有解決方案,或者我嘗試的方法不可行。它看起來類似于問題如何使用泛型類型參數傳入 func?,雖然它對我的場景沒有幫助。
查看完整描述

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);

}

這稱為方法重載。編譯器將通過從提供的函數推斷類型來自動選擇具有正確參數的正確方法。


查看完整回答
反對 回復 2021-10-09
?
繁花不似錦

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);


查看完整回答
反對 回復 2021-10-09
  • 2 回答
  • 0 關注
  • 242 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號