最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#匿名方法與Delegate類型轉(zhuǎn)換錯誤分析

 更新時間:2014年11月22日 10:11:18   投稿:shichen2014  
這篇文章主要介紹了C#匿名方法與Delegate類型轉(zhuǎn)換錯誤,較為詳細(xì)的分析了C#匿名方法的用法及Delegate類型轉(zhuǎn)換錯誤問題解決方法,具有一定的實用價值,需要的朋友可以參考下

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

問題描述 

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

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

public IAsyncResult BeginInvoke(Delegate method);

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

復(fù)制代碼 代碼如下:
delegate void DoSomething();
private void App()
{
    XXControl.Invoke(new DoSomething(() =>
    {
        //DoSomething的具體操作
    }));
}

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

復(fù)制代碼 代碼如下:
private void App()
{
    XXControl.Invoke(delegate
    {
        //DoSomething的具體操作
    });
}

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

解決方法

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

1. 使用MethodInvoke或者Action

復(fù)制代碼 代碼如下:
private void App()
{
    XXControl.Invoke((MethodInvoker)delegate()
    {
        //DoSomething的具體操作
    });
}
private void App()
{
    XXControl.Invoke((Action)delegate()
    {
        //DoSomething的具體操作
    });
}

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

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

復(fù)制代碼 代碼如下:
public static void Invoke(this Control control, Action action)
{
    control.Invoke((Delegate)action);
}

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

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

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

相關(guān)文章

  • 如何使用Dapper處理多個結(jié)果集與多重映射實例教程

    如何使用Dapper處理多個結(jié)果集與多重映射實例教程

    Dapper類是一個開源的數(shù)據(jù)庫操作類,下面這篇文章主要給大家介紹了關(guān)于如何使用Dapper處理多個結(jié)果集與多重映射的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片

    Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片

    這篇文章主要介紹了Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片,在window系統(tǒng)中,自帶的鼠標(biāo)外觀可能看起來比較小,因此我們需要使用自己的鼠標(biāo)圖片外觀
    2020-11-11
  • C#調(diào)用AForge實現(xiàn)攝像頭錄像的示例代碼

    C#調(diào)用AForge實現(xiàn)攝像頭錄像的示例代碼

    這篇文章主要介紹了C#調(diào)用AForge實現(xiàn)攝像頭錄像的示例代碼,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • WinForm下 TextBox只允許輸入數(shù)字的小例子

    WinForm下 TextBox只允許輸入數(shù)字的小例子

    WinForm下 TextBox只允許輸入數(shù)字的小例子,需要的朋友可以參考一下
    2013-04-04
  • 基于c#實現(xiàn)的九九乘法表(簡單實例)

    基于c#實現(xiàn)的九九乘法表(簡單實例)

    本文主要分享了基于c#實現(xiàn)的九九乘法表,代碼簡潔,需要的朋友可以參考下,希望對大家有所幫助
    2016-12-12
  • C# 如何調(diào)用SAP RFC

    C# 如何調(diào)用SAP RFC

    這篇文章主要介紹了C# 如何調(diào)用SAP RFC,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 最新評論

    磴口县| 山丹县| 大石桥市| 响水县| 光山县| 信宜市| 汕尾市| 松原市| 华池县| 固阳县| 江津市| 中山市| 兴文县| 淮安市| 丽江市| 桃江县| 永嘉县| 旌德县| 繁昌县| 遵化市| 民勤县| 松溪县| 贺兰县| 丹寨县| 安康市| 镇远县| 宁乡县| 秀山| 云霄县| 鹤壁市| 南部县| 赫章县| 浦县| 白山市| 仪征市| 临沧市| 汉寿县| 河北省| 荣成市| 汶上县| 九寨沟县|