VB.NET匿名委托的等效C#代码是什么?

时间:2014-01-16 18:29:20

标签: c# .net vb.net delegates anonymous

以下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示例中变量moomoo.GetType())的类型为VB$AnonymousDelegate_0'2[System.String,System.String]

C#中有没有与此相同的内容?

4 个答案:

答案 0 :(得分:5)

lambda需要推断从其上下文中使用的委托的类型。隐式类型变量将从分配给它的内容中推断出它的类型。他们每个人都试图从另一个推断他们的类型。您需要明确使用某处类型。

有很多代表可以拥有您正在使用的签名。编译器需要某种方式来知道使用哪一个。

最简单的选择是使用:

Func<string, string> moo = x => x.ToString();

如果您确实仍想使用var,您可以执行以下操作:

var moo = new Func<string, string>(x => x.ToString());

答案 1 :(得分:0)

您不需要在lambda表达式中指定参数类型,只需执行以下操作:

Func<string, string> moo = (x) => x.ToString();

答案 2 :(得分:0)

Func<string, string> moo = (x) => x.ToString();

使用var C#不知道您是否需要FuncAction或其他内容。

答案 3 :(得分:0)

问题是您不能对委托使用隐式类型。意味着LHS上的var是问题的实际原因,你的lambda表达式很好。如果将其更改为以下内容,它将按预期编译并运行;

 Func<string, string> moo = (string x) => x.ToString();