字符串拼接新技能

關於這個問題先來看一段代碼:

String strPath = sImagePath + "\\" + sIP.ToString() + "\\高清圖\\" + Convert.ToString(dt.Year) +
                   Convert.ToString(dt.Month) +
                  Convert.ToString(dt.Day);
            Directory.CreateDirectory(strPath);
            strSpeFile = strPath + "\\" + strTime + "(" + sPlate.ToString() + ").jpg";
  
            //將抓拍圖片存儲到隊列中
            queueImg.Enqueue(strSpeFile);
            log.Error("車牌識別圖片路徑:" + strSpeFile);
  
            strPath = sImagePath + "\\" + sIP.ToString() + "\\車牌圖\\" + Convert.ToString(dt.Year) +
                  Convert.ToString(dt.Month) +
                  Convert.ToString(dt.Day);
            Directory.CreateDirectory(strPath);
            strPlateFile = strPath + "\\" + strTime + "(" + sPlate.ToString() + ").jpg";
  
            strPath = sImagePath + "\\" + sIP.ToString() + "\\二值化圖\\" + Convert.ToString(dt.Year) +
                   Convert.ToString(dt.Month) +
                  Convert.ToString(dt.Day);
            Directory.CreateDirectory(strPath);
            strTwoFile = strPath + "\\" + strTime + "(" + sPlate.ToString() + ").bin";

使用“+”來拼接字符串,應該是最常見的做法,很直觀,但也是最低級的做法,說到優化,大家很容易就想到了  string.Format、StringBuilder等方法或類來處理。

比如用  string.Format來處理一段代碼,如下

String strPath =string.Format("{0}\\{1}\\高清圖\\{2}{3}{4}",sImagePath,sIP.ToString(), Convert.ToString(dt.Year),
 Convert.ToString(dt.Month),Convert.ToString(dt.Day));

看起來不錯,節儉多了,性能上來說也有所提高。然後有個人突然告訴你,你的參數順序寫錯了,然後你又急急忙忙一個一個的去對。。

之後你又換了個方法,用StringBuilder,代碼如下

StringBuilder str= new StringBuilder();
            str.Append(sImagePath);
            str.Append("\\");
            str.Append(sIP.ToString());
            str.Append("\\高清圖\\");
            str.Append(Convert.ToString(dt.Year));
            str.Append(Convert.ToString(dt.Month));
            str.Append(Convert.ToString(dt.Day));

這下總不會多或者少了吧,性能也一樣提高了,正當你要忘記了的時候,突然有天你有看到了這段代碼,看了好半天才終於知道自己要拼的什麼字符串,也是醉了

你看看下面這段代碼

String strPath = $"{sImagePath}\\{sIP.ToString()}\\高清圖\\{Convert.ToString(dt.Year)}{Convert.ToString(dt.Month)}{Convert.ToString(dt.Day)}";
  
            Directory.CreateDirectory(strPath);
            strSpeFile = $"{strPath}\\{strTime}({sPlate.ToString()}).jpg";
  
            //將抓拍圖片存儲到隊列中
            queueImg.Enqueue(strSpeFile);
            log.Error($"車牌識別圖片路徑:{strSpeFile}");
  
            strPath = $"{sImagePath}\\{sIP.ToString()}\\車牌圖\\{Convert.ToString(dt.Year)}{Convert.ToString(dt.Month)}{Convert.ToString(dt.Day)}";
            Directory.CreateDirectory(strPath);
            strPlateFile = $"{strPath}\\{strTime}({sPlate.ToString()}).jpg";
  
            strPath = $"{sImagePath}\\{sIP.ToString()}\\二值化圖\\{Convert.ToString(dt.Year)}{Convert.ToString(dt.Month)}{Convert.ToString(dt.Day)}";
            Directory.CreateDirectory(strPath);
            strTwoFile = $"{strPath}\\{strTime}({sPlate.ToString()}).bin";

 跟前面的都比較一下,是不是也能很快就看出來,變量也不用擔心寫錯地方,性能怎麼樣?也是槓槓的。如果你還沒有見過這種寫法,那說明你out了,這是新技能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章