西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → C#匿名方法與Delegate類型轉(zhuǎn)換出錯(cuò)的解決方案

C#匿名方法與Delegate類型轉(zhuǎn)換出錯(cuò)的解決方案

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2011/4/30 22:23:52字體大小:A-A+

作者:西西點(diǎn)擊:445次評(píng)論:0次標(biāo)簽: Delegate

  • 類型:音頻處理大。1.2M語言:英文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載
 C#2.0出現(xiàn)了匿名方法, 這在一定程度上節(jié)省了我們維護(hù)代碼上下文的精力, 也不需要思考為某個(gè)方法取什么名字比較合適. 在FCL的一些方法中要求傳入一個(gè)Delegate類型的參數(shù), 比如Control.Invoke或者Control.BeginInvoke方法:

0 public object Invoke(Delegate method);

1 public IAsyncResult BeginInvoke(Delegate method);

在這種情況下, 如果不使用匿名方法, 則需要在代碼的上面先聲明一個(gè)delegate void DoSomething()方法, 然后可以在Invoke方法中再用lambda表達(dá)式或者委托實(shí)現(xiàn)DoSomething().

0 delegate void DoSomething();

1

2 private void App()

3 {

4 XXControl.Invoke(new DoSomething(() =>

5 {

6 //DoSomething的具體操作

7 }));

8 }

這樣做可以是可以, 但使用匿名方法則更好, 最起碼看上去更簡潔.

0 private void App()

1 {

2 XXControl.Invoke(delegate

3 {

4 //DoSomething的具體操作

5 });

6 }

上面的代碼會(huì)在編譯的時(shí)候出錯(cuò): Cannot convert anonymous method to type 'System.Delegate' because it is not a delegate type. 方法要求參數(shù)的是一個(gè)委托(delegate)類型, 而現(xiàn)在傳遞的只是一個(gè)匿名方法. 產(chǎn)生這個(gè)錯(cuò)誤最根本的原因是編譯器在處理匿名方法的時(shí)候, 沒法推斷出這個(gè)委托的方法返回的是什么類型, 也就不知道返回一個(gè)什么樣的委托.

解決方法
要解決上面這個(gè)問題, 從根本上來說就是指定這個(gè)匿名方法將會(huì)返回什么類型的委托, 有幾種方法:

1. 使用MethodInvoke或者Action

0 private void App()

1 {

2 XXControl.Invoke((MethodInvoker)delegate()

3 {

4 //DoSomething的具體操作

5 });

6 }
0 private void App()

1 {

2 XXControl.Invoke((Action)delegate()

3 {

4 //DoSomething的具體操作

5 });

6 }

MethodInvoke和Action都是方法返回類型為空的委托.

2. 可以給Control定義一個(gè)Invoke的擴(kuò)展方法

0 public static void Invoke(this Control control, Action action)

1 {

2 control.Invoke((Delegate)action);

3 }

調(diào)用的時(shí)候則可以這樣調(diào)用:

0 //使用委托

1 XXControl.Invoke(delegate { //DoSomething here});

2 //使用lambda表達(dá)式

3 XXControl.Invoke(()=>{ //DoSomething here});

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)