哈哈,說實話,個人看著這麼長的三元操作也麻煩,但是我也只想到了這樣三元判斷句中執行方法體能夠寫到一行,追求的終極目的是,用一行實現這個過程,而且簡單,由於篇幅,我就不截圖我其實是放在一行上的
討論的重點是怎麼做的更極致,而不是這樣搞規范不規范,求更有創意的寫法。。。
。。 。。華麗麗的分割線。。 。。
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(); } } }
查看本欄目