程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C# 求精簡用一行代碼完成的多項判斷及重復賦值

C# 求精簡用一行代碼完成的多項判斷及重復賦值

編輯:關於C#

哈哈,說實話,個人看著這麼長的三元操作也麻煩,但是我也只想到了這樣三元判斷句中執行方法體能夠寫到一行,追求的終極目的是,用一行實現這個過程,而且簡單,由於篇幅,我就不截圖我其實是放在一行上的

討論的重點是怎麼做的更極致,而不是這樣搞規范不規范,求更有創意的寫法。。。

。。 。。華麗麗的分割線。。 。。

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();
                    }
                }
            }

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved