|
|
1
21
因为类型System.Delegate不是“Delegate”。这只是基类。您必须使用具有正确签名的委托类型。按如下方式定义您的方法:
编辑: MyMethod(object)不起作用,因为lambda表达式本身没有类型,但该类型是从分配给它的位置的类型推断出来的。所以这个对象也不起作用。您必须使用具有正确签名的委托类型。 |
|
|
2
14
使用中:
|
|
|
3
3
兰姆达式
为了使lambda能够分配给它所适合的所有委托类型,lambda本身并没有固有的类型。相反,只要有可能,它将采用您正在使用的代理的类型。(
而两者
我确实认为编译器给出的错误消息
|
|
4
2
试试这个:
您需要将强类型委托作为方法的参数。其他调用失败的原因是C#编译器不允许将lambda表达式传递给需要
当您将lambda传递给像我上面所展示的那样的函数时,编译可以安全地假设您希望lambda表达式转换为特定的委托类型,并这样做。 |
|
|
5
0
您需要显式地将委托对象强制转换为编译器的性质
您需要的是双重演员阵容,例如:
当然,这与方法签名相对应:
根据您的情况,您可能需要定义类型为的参数
|
|
|
6
0
失败的原因与“object del=(int a)=>a”甚至“var del=(int a)=>a”之类的表达式失败的原因相同。您可能认为编译器可以找出lambda表达式的类型,因为您显式地给出了参数的类型,但是即使知道表达式接受int并返回int,也可以将它转换为许多委托类型。Func委托类型是此类泛型函数最常用的类型,但这只是一种约定,编译器对此一无所知。 您需要做的是将lambda表达式强制转换为具体的委托类型,以便让编译器使用普通强制转换语法(Func)((int a)=>a)或使用委托构造函数语法new Func((int a)=>a)选择委托重载。 此外,通常不希望使用非类型化委托类,除非您需要根据它接受的参数数量以不同的方式调用某些对象。对于回调之类的事情,接受Func或Action几乎总是更好的。 |
|
|
Sergei · 删除数据框中多个列的列表中的某些元素 4 年前 |