国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#匿名方法與Delegate類型轉換錯誤分析

2019-10-29 21:46:00
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C#匿名方法與Delegate類型轉換錯誤,較為詳細的分析了C#匿名方法的用法及Delegate類型轉換錯誤問題解決方法,具有一定的實用價值,需要的朋友可以參考下
 

本文實例分析了C#匿名方法與Delegate類型轉換錯誤。分享給大家供大家參考。具體分析如下:

問題描述 

C#2.0出現了匿名方法, 這在一定程度上節省了我們維護代碼上下文的精力, 也不需要思考為某個方法取什么名字比較合適. 在FCL的一些方法中要求傳入一個Delegate類型的參數, 比如Control.Invoke或者Control.BeginInvoke方法:

復制代碼代碼如下:
public object Invoke(Delegate method);

 

public IAsyncResult BeginInvoke(Delegate method);

 

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

復制代碼代碼如下:
delegate void DoSomething(); 
private void App() 

    XXControl.Invoke(new DoSomething(() => 
    { 
        //DoSomething的具體操作 
    })); 
}

 

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

復制代碼代碼如下:
private void App() 

    XXControl.Invoke(delegate
    { 
        //DoSomething的具體操作 
    }); 
}

 

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

解決方法

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

1. 使用MethodInvoke或者Action

復制代碼代碼如下:
private void App() 

    XXControl.Invoke((MethodInvoker)delegate() 
    { 
        //DoSomething的具體操作 
    }); 
}
private void App() 

    XXControl.Invoke((Action)delegate() 
    { 
        //DoSomething的具體操作 
    }); 
}

 

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

2. 可以給Control定義一個Invoke的擴展方法

復制代碼代碼如下:
public static void Invoke(this Control control, Action action) 

    control.Invoke((Delegate)action); 
}

 

調用的時候則可以這樣調用:

復制代碼代碼如下:
//使用委托 
XXControl.Invoke(delegate { //DoSomething  here}); 
//使用lambda表達式 
XXControl.Invoke(()=>{ //DoSomething here});

 

希望本文所述對大家的C#程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永福县| 灵寿县| 兴国县| 马关县| 佛学| 卓尼县| 榆林市| 华蓥市| 临西县| 分宜县| 远安县| 广宗县| 邢台县| 雅江县| 永定县| 满洲里市| 晋中市| 九龙城区| 林周县| 蚌埠市| 牙克石市| 浦北县| 开原市| 台南县| 清徐县| 大荔县| 磐石市| 绍兴市| 闽清县| 双桥区| 惠水县| 图木舒克市| 南木林县| 和田市| 左云县| 榆树市| 上虞市| 宜州市| 洛浦县| 永昌县| 隆尧县|