如何格式化复杂的链式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);更多推荐
发布评论