如何格式化复杂的链式Linq语句以获得可读性?(How to format complex chained Linq statements for readibility?)

编程入门 行业动态 更新时间:2024-10-27 23:26:58
如何格式化复杂的链式Linq语句以获得可读性?(How to format complex chained Linq statements for readibility?)

我有一些像这样的代码:

var effects = xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select ( e => new Effect ( ( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ), e.Elements ( "Options" ).Any ( ) ? e.Elements ( "Options" ).Select ( o => ( object ) o.Elements ( "Option" ).Select ( n => n.Value ).First ( ) ) : null ) ) .ToList ( );

但目前这看起来并不可读,我不确定在哪里添加新行和/或缩进以提高可读性。

我可以用什么建议来制作一致的,可读的linq块?

I have some code like this:

var effects = xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select ( e => new Effect ( ( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ), e.Elements ( "Options" ).Any ( ) ? e.Elements ( "Options" ).Select ( o => ( object ) o.Elements ( "Option" ).Select ( n => n.Value ).First ( ) ) : null ) ) .ToList ( );

But currently this doesn't look as readable and I am not sure where I should add a new line and/or indent for readability.

Any suggestions I could use to make consistent, readable linq blocks?

最满意答案

完全主观的问题,甚至不知道我为什么要回答它,但这对我来说更具可读性:

var effects = xElement .Elements("Effects") .Elements("Effect") .Select(e => new Effect( (EffectType)Enum.Parse( typeof(EffectType), (string)e.Elements("Type").FirstOrDefault() ), e.Elements("Options").Any() ? e.Elements("Options").Select( o => o.Elements("Option").Select(n => n.Value).First() ) : null ) ) .ToList();

或者如果您更喜欢查询语法:

var effects = from e in xElement.Elements("Effects").Elements("Effect") let effectType = (EffectType)Enum.Parse( typeof(EffectType), (string)e.Elements("Type").FirstOrDefault() ) let options = e.Elements("Options").Any() ? e.Elements("Options").Select( o => o.Elements("Option").Select(n => n.Value).First() ) : null select new Effect(effectType, options);

Totally subjective question, don't even know why I am answering it but here's what looks more readable to me:

var effects = xElement .Elements("Effects") .Elements("Effect") .Select(e => new Effect( (EffectType)Enum.Parse( typeof(EffectType), (string)e.Elements("Type").FirstOrDefault() ), e.Elements("Options").Any() ? e.Elements("Options").Select( o => o.Elements("Option").Select(n => n.Value).First() ) : null ) ) .ToList();

or if you prefer the query syntax:

var effects = from e in xElement.Elements("Effects").Elements("Effect") let effectType = (EffectType)Enum.Parse( typeof(EffectType), (string)e.Elements("Type").FirstOrDefault() ) let options = e.Elements("Options").Any() ? e.Elements("Options").Select( o => o.Elements("Option").Select(n => n.Value).First() ) : null select new Effect(effectType, options);

更多推荐

本文发布于:2023-07-22 06:59:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1217914.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链式   可读性   语句   Linq   format

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!