Raw*_*ing 13 c# linq-query-syntax language-lawyer roslyn
我正在Roslyn中实现C#规范7.16.2"查询表达式转换".但是,我在7.16.2.5"选择子句"中遇到了问题.
它读
表单的查询表达式
Run Code Online (Sandbox Code Playgroud)from x in e select v被翻译成
Run Code Online (Sandbox Code Playgroud)( e ) . Select ( x => v )除非v是标识符x,否则翻译很简单
Run Code Online (Sandbox Code Playgroud)( e )例如
Run Code Online (Sandbox Code Playgroud)from c in customers.Where(c => c.City == "London") select c简单地翻译成
Run Code Online (Sandbox Code Playgroud)customers.Where(c => c.City == "London")
我的代码不会产生与示例匹配的结果,因为(根据"除非"行),我将其翻译from x in e select x成( e ),而不仅仅是e.因此,我的代码将示例翻译成
( customers.Where(c => c.City == "London") )
Run Code Online (Sandbox Code Playgroud)
规范中的示例是错误的,还是我需要进行处理以识别是否需要括起括号?如果是这样,这是在规范的某个地方吗?
同样,7.16.2.6(Groupby条款)说
表单的查询表达式
Run Code Online (Sandbox Code Playgroud)from x in e group v by k被翻译成
Run Code Online (Sandbox Code Playgroud)( e ) . GroupBy ( x => k , x => v )除非v是标识符x,否则翻译为
Run Code Online (Sandbox Code Playgroud)( e ) . GroupBy ( x => k )这个例子
Run Code Online (Sandbox Code Playgroud)from c in customers group c.Name by c.Country被翻译成
Run Code Online (Sandbox Code Playgroud)customers. GroupBy(c => c.Country, c => c.Name)
在那里,示例结果再次缺少规范建议的括号.
您的翻译加上附加的(和)是正确的。但如果你想消除多余的括号,你可以调用
.WithAdditionalAnnotations(CodeAnnotations.Simplify)
Run Code Online (Sandbox Code Playgroud)
关于你的结果SyntaxNode.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |