C# lambda 表达式中的 switch
是否可以在 lambda 表达式中添加 switch?如果没有,为什么? Resharper 将其显示为错误。
Is it possible to have a switch in a lambda expression? If not, why? Resharper displays it as an error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以在语句块中使用 lambda:
但是您不能在“单个表达式 lambda”中执行此操作,因此这是无效的:
这意味着您不能在表达式树中使用 switch(至少是由 C# 编译器生成的;我相信 .NET 4.0 至少在库中支持它)。
You can in a statement block lambda:
But you can't do it in a "single expression lambda", so this is invalid:
This means you can't use switch in an expression tree (at least as generated by the C# compiler; I believe .NET 4.0 at least has support for it in the libraries).
在纯
表达式
(在.NET 3.5中)中,您可以获得的最接近的是复合条件:不好玩,尤其是当它变得复杂时。如果您指的是带有语句主体的 lamda 表达式(仅适用于 LINQ-to-Objects),那么大括号内的任何内容都是合法的:
当然,您可以外包这项工作;例如,LINQ-to-SQL 允许您将标量 UDF(在数据库中)映射到数据上下文上的方法(实际未使用) - 例如:
其中
MapType
是在数据库服务器上执行工作的 UDF。In a pure
Expression
(in .NET 3.5), the closest you can get is a compound conditional:Not fun, especially when it gets complex. If you mean a lamda expression with a statement body (only for use with LINQ-to-Objects), then anything is legal inside the braces:
Of course, you might be able to outsource the work; for example, LINQ-to-SQL allows you to map a scalar UDF (at the database) to a method on the data-context (that isn't actually used) - for example:
where
MapType
is a UDF that does the work at the db server.是的,它可以工作,但是您必须将代码放在一个块中。示例:
然后,调用它:
Yes, it works, but you have to put your code in a block. Example:
Then, to call it:
您可以在语句块 lambda 中:
You can in a statement block lambda:
嗯,我认为这没有理由行不通。请注意您使用的语法
Hmm, I see no reason why this shouldn't work. Just be careful with the syntax you use
我也检查了:-)
工作得很好(输出“Smurf”)!
I checked it too :-)
Works just fine (outputs "Smurf")!
我刚刚学到这个:
只需放在“model”()之间并在{}中添加您的代码,记住有一个返回。
我不确定 C# 的哪个版本可以工作,在这个例子中是 C# 7.0
我希望这个答案可以帮助别人。
I just learn this:
Just put between the "model" () and add your code in { }, remember to have a return.
I am not sure in which versions of C# will work, In this example is the C# 7.0
I hope this answer can help someone.