C# 求精简用一行代码完成的多项判断及重复赋值2014-10-01 cnblogs 迹`@柳燕哈哈,说实话,个人看着这么长的三元操作也麻烦,但是我也只想到了这样三元判断句中执行方法体能够写到一行,追求的终极目的是,用一行实现这个过程,而且简单,由于篇幅,我就不截图我其实是放在一行上的讨论的重点是怎么做的更极致,而不是这样搞规范不规范,求更有创意的写法。。。。。 。。华丽丽的分割线。。 。。var turecolor = colorJToken.OfType<JProperty>().Sum(d => (int)d.Value << "bgra".IndexOf(d.Name) * 8).ToString("X8");如果是处理颜色,相信 Choo给出的写法想必是极好的,那么如果扩展成普通的用法呢?。。 。。华丽丽的分割线。。 。。刚说不实用,先不讨论是不是实用,也不管可读性,单纯的想把代码写在一行上,而且写的少,总结一下,主要内容在这,我想到的写到一行的方法是在三元判断句中执行方法体bool b = 1 == 1 ? ((Func<bool>)(() => true)).Invoke() : ((Func<bool>)(() => false)).Invoke();能不能继续精简这样一句话?鬼柒 在评论中提出了直接纯赋值的写法,嗯,这个在不需要做额外判断的时候好了太多,那么现在的场景是,需要进行判断赋值的话,怎么样写呢?( Name == "a" ? alph = (Byte)Value : Name == "r" ? red = (Byte)Value : Name == "g" ? green = (Byte)Value : Name == "b" ? blue = (Byte)Value).ToString(0);。。 。。华丽丽的分割线。。 。。其中 color仅仅为一个普通的JToken类型,需要精简的是,对于循环重复赋值上,能不能有更简单而且简洁的写法。。。需求是,用一行完成,且必须有能够执行多判断的地方

Byte red = 0, green = 0, blue = 0, alph = 255;JToken colorJToken = CurrentVersion < ColorVersion ? color.FirstOrDefault() : color;if (colorJToken != null){foreach (var item in colorJToken){var colorJProperty = item as JProperty;if (colorJProperty != null && colorJProperty.Value != null){//以下求精简(colorJProperty.Name == "a" ? ((Func<bool>)(() => colorJProperty.Value is Byte && (alph = (Byte)colorJProperty.Value).Equals(alph))).Invoke() :(colorJProperty.Name == "r" ? ((Func<bool>)(() => (red = (Byte)colorJProperty.Value).Equals(red))).Invoke() :(colorJProperty.Name == "g" ? ((Func<bool>)(() => (green = (Byte)colorJProperty.Value).Equals(green))).Invoke() :(colorJProperty.Name == "b" ? ((Func<bool>)(() => (blue = (Byte)colorJProperty.Value).Equals(blue))).Invoke() :((Func<bool>)(() => false)).Invoke())))).ToString();}}}