知道為什么要用內(nèi)插字符串,只有踩過坑的人才能明白,如果你曾今使用string.format超5個(gè)以上占位符,那其中的痛苦我想你肯定是能夠共鳴的。

          一:痛苦經(jīng)歷

          先上一段曾今寫過的一段代碼,大家來體會(huì)一下:
          LogHelper.WriteLog(string.Format(@"=== Square發(fā)送服務(wù)中 === 【第四步】 leaflet發(fā)送成功。
          marketID={0}, marketName={1}, 總共客戶:{2}, 成功:{3}人, 失敗:{4}人,重復(fù):{5}人,
          當(dāng)前優(yōu)先級(jí):{6},所屬shopID={7}", leafletEntity.MarketingID,
          leafletEntity.MarketingName,
          leafletEntity.CustomerList.Count,leafletEntity.SuccessCount,
          leafletEntity.FailCount, leafletEntity.RepeatCustomerNum,
          leafletEntity.Priority, leafletEntity.ShopID));
          這里擁有多達(dá)8個(gè)占位符,當(dāng)年寫這個(gè)的時(shí)候,會(huì)有三個(gè)痛點(diǎn)。

          1. 占位符不能寫錯(cuò)了

          比如這里的 {0},{1},{2}.... 不能寫成了 {0},{0},{2},造成結(jié)果的重復(fù)輸出。



          2. 參數(shù)值個(gè)數(shù)不能多也不能少

          比如把最后的leafletEntity.ShopID 參數(shù)值給丟了,造成8個(gè)占位符,7個(gè)參數(shù)的現(xiàn)象,這樣就會(huì)造成系統(tǒng)拋異常。


          3. 參數(shù)值順序不能錯(cuò)


          參數(shù)值個(gè)數(shù)多了,很難保證順序沒被搞錯(cuò),比如這里的leafletEntity.FailCount和leafletEntity.RepeatCustomerNum,顛倒為leafletEntity.RepeatCustomerNum和leafletEntity.FailCount,你能一眼看出來嗎???


          二:解決辦法


          string.format也是曾今模仿C語言留下來的歷史遺留問題,如今C#6.0出來了這個(gè)內(nèi)插字符串完美的解決了這三個(gè)問題,簡直不要太興奮,接下來把文章開頭處改成內(nèi)插版。
          LogHelper.WriteLog($@"=== Square發(fā)送服務(wù)中 === 【第四步】 leaflet發(fā)送成功。
          marketID={leafletEntity.MarketingID}, marketName={leafletEntity.MarketingName},
          總共客戶:{leafletEntity.CustomerList.Count}, 成功:{leafletEntity.SuccessCount}人,
          失敗:{leafletEntity.FailCount}人, 重復(fù):{leafletEntity.RepeatCustomerNum}人,
          當(dāng)前優(yōu)先級(jí):{leafletEntity.Priority}, 所屬shopID={leafletEntity.ShopID}");
          內(nèi)插字符串法僅僅就是在字符串前面加上"$"即可,給點(diǎn)時(shí)間大家仔細(xì)品味一下,是不是很好的解決了我之前提到的3個(gè)痛點(diǎn)。

          1. 三目運(yùn)算符在內(nèi)插法的使用

          很多時(shí)候在業(yè)務(wù)開發(fā)中,不能僅僅是填充一個(gè)變量,而最好還應(yīng)該支持一些表達(dá)值,如使用最多的三目運(yùn)算符

          <1> 錯(cuò)誤使用方式

          如果你直接這么寫,通過不了狠毒的編譯器,比如下面這樣。



          <2> 正確使用方式

          解決方法也能簡單,在外圍加上一個(gè)()即可。


          2. 復(fù)雜邏輯的內(nèi)插法使用

          如果你有復(fù)雜的業(yè)務(wù)邏輯,建議單獨(dú)另起一個(gè)方法。
          class Program { static void Main(string[] args) { var num = 10; var info =
          $"i={GetNum(num)}"; } public static int GetNum(int num) { return num == 10 ? 1
          : 2; } }
          如何你的業(yè)務(wù)邏輯相對(duì)比較簡單,可以用內(nèi)聯(lián)委托的方式實(shí)現(xiàn)。



          三:探究原理

          接下來探究一下,內(nèi)插字符串這種語法糖在IL層面到底是個(gè)啥玩意,你可以通過ILSpy工具查看IL代碼。


          從上面的截圖來看,其實(shí)所謂的“內(nèi)插字符串”就是string.format,編譯器的語法糖而已

          注意點(diǎn):

          因?yàn)橛幸粋€(gè)box操作,所以你要當(dāng)點(diǎn)心,如果Console.WriteLine多次執(zhí)行會(huì)有一定的性能損失,建議提前做好box操作,例如下面這樣。
          static void Main(string[] args) { int i = 1, j = 2, k = 3; var it =
          i.ToString(); var jt = j.ToString(); var kt = k.ToString(); for (int m = 0; m <
          int.MaxValue; m++) { Console.WriteLine($"i={it},j={jt},k={kt}"); } }
          好了,本篇就說到這里,希望對(duì)你有幫助。

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                亚洲色涩| 日批视频免费观看 | 黄色一级AV | 美女脱得一光二净无内衣内裤 | 国产又粗又猛又爽又黄的视频免费 |