[英]What is the equivalent C# code for a VB.NET anonymous delegate?
以下VB.NET的等效C#代码是什么:
Dim moo = Function(x as String) x.ToString()
我认为这应该可行:
var moo = (string x) => x.ToString();
但这产生了编译器错误: Cannot assign lamda expression to an implicitly-typed local variable
经过进一步调查,我发现VB示例中的变量moo
( moo.GetType()
)的类型为VB$AnonymousDelegate_0'2[System.String,System.String]
C#中有与此等效的东西吗?
lambda需要从其上下文中推断使用的委托的类型。 隐式类型的变量将从分配给它的内容中推断出其类型。 他们每个人都试图从另一个人推断自己的类型。 您需要在某处显式使用该类型。
有很多代表可以使用您正在使用的签名。 编译器需要某种方式来知道要使用哪个。
最简单的选择是使用:
Func<string, string> moo = x => x.ToString();
如果你真的想仍然使用var
,你可以这样做:
var moo = new Func<string, string>(x => x.ToString());
您无需在lambda表达式中指定参数类型,只需执行以下操作:
Func<string, string> moo = (x) => x.ToString();
Func<string, string> moo = (x) => x.ToString();
使用var
C#并不知道您是否需要Func
and Action
或其他功能。
问题是您不能对代理使用隐式类型。 意味着LHS上的var
是问题的实际原因,您的lambda表达式很好。 如果将其更改为以下内容,它将按预期进行编译和运行;
Func<string, string> moo = (string x) => x.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.