C 匿名方法與Delegate型別轉換錯誤

2021-09-08 23:04:54 字數 1190 閱讀 6385

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

));}

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

上面的**會在編譯的時候出錯:cannot convert anonymous method to type 'system.delegate' because it is not a delegate type. 方法要求引數的是乙個委託(delegate)型別, 而現在傳遞的只是乙個匿名方法. 產生這個錯誤最根本的原因是編譯器在處理匿名方法的時候, 沒法推斷出這個委託的方法返回的是什麼型別, 也就不知道返回乙個什麼樣的委託.

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

1. 使用methodinvoke或者action);

} );}

methodinvoke和action都是方法返回型別為空的委託.

2. 可以給control定義乙個invoke的擴充套件方法

public static void invoke(this control control, action action)

呼叫的時候則可以這樣呼叫:

//使用委託

xxcontrol.invoke(delegate );

//使用lambda表示式

xxcontrol.invoke(()=>);

1.

2.

C 匿名方法與Delegate型別轉換錯誤

問題描述 c 2.0出現了匿名方法,這在一定程度上節省了我們維護 上下文的精力,也不需要思考為某個方法取什麼名字比較合適.在fcl的一些方法中要求傳入乙個delegate型別的引數,比如control.invoke或者control.begininvoke方法 0 public object inv...

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

問題描述 c 2.0出現了匿名方法,這在一定程度上節省了我們維護 上下文的精力,也不需要思考為某個方法取什麼名字比較合適.在fcl的一些方法中要求傳入乙個delegate型別的引數,比如control.invoke或者control.begininvoke方法 複製 如下 public object...

匿名類與擴充套件方法

var可以根據變數的初始值自動推斷區域性變數的型別 var只能定影區域性變數,而不能定義成員變數 定義的時候必須同時完成初始化,而不能使用var定義變數為null var本身並不是一種新的型別,只是用來修飾乙個可推斷出具體型別的區域性變數 var定義變數和object型別定義的區別 console....