以下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#中有没有与此相同的内容?
答案 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#不知道您是否需要Func
和Action
或其他内容。
答案 3 :(得分:0)
问题是您不能对委托使用隐式类型。意味着LHS上的var
是问题的实际原因,你的lambda表达式很好。如果将其更改为以下内容,它将按预期编译并运行;
Func<string, string> moo = (string x) => x.ToString();