<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C#: 不同的方式檢查Null

          共 1543字,需瀏覽 4分鐘

           ·

          2021-10-15 04:14

          074de9647204537cc75b103579e5dc60.webp

          • 原文鏈接:https://www.thomasclaudiushuber.com/2020/03/12/c-different-ways-to-check-for-null/
          • 原文作者:Thomas
          • 翻譯:沙漠盡頭的狼

          檢查參數(shù)值是否為空的經(jīng)典方法是什么?如果您已經(jīng)使用C語言開發(fā)了一段時(shí)間,您可能會(huì)熟悉以下經(jīng)典語法:

          public?static?int?CountNumberOfSInName(string?name)
          {
          ??if?(name?==?null)
          ??{
          ????throw?new?ArgumentNullException(nameof(name));
          ??}

          ??return?name.Count(c?=>?char.ToLower(c).Equals('s'));
          }

          自C# 7開始,您可以使用is關(guān)鍵字進(jìn)行null檢查,如下面的代碼段所示:

          if?(name?is?null)
          {
          ??throw?new?ArgumentNullException(nameof(name));
          }

          但是對(duì)于C# 7,甚至還有一個(gè)更短的語法。還引入了丟棄。它們是未使用且被忽略的變量,在代碼中用下劃線(_)。結(jié)合空合并運(yùn)算符(??),可以這樣編寫空檢查:

          _?=?name????throw?new?ArgumentNullException(nameof(name));

          也就是說,整個(gè)方法看起來就像這樣:

          public?static?int?CountNumberOfSInName(string?name)
          {
          ??_?=?name????throw?new?ArgumentNullException(nameof(name));

          ??return?name.Count(c?=>?char.ToLower(c).Equals('s'));
          }

          老實(shí)說,我真的很喜歡使用丟棄的最后一種方法,但是對(duì)于一些開發(fā)人員來說,這可能太多了。我認(rèn)為is關(guān)鍵字非常清晰易讀。它是我的最愛。

          is關(guān)鍵字還有一個(gè)很大的優(yōu)點(diǎn),就是它忽略了任何==/!=運(yùn)算符或者重載特定類。不管是否有操作符重載,它都將執(zhí)行null檢查。這比僅僅使用==更好。你可以在這篇博文[1]中了解更多。

          C# 9.0中的Is關(guān)鍵字和Not模式

          在C# 9.0中,如果您想檢查對(duì)象不為null,那么將is表達(dá)式與邏輯not模式結(jié)合起來這是非常強(qiáng)大的。在C# 9.0之前,您必須使用如下的is表達(dá)式來檢查對(duì)象是否為null:

          if?(!(name?is?null))?{?}

          一些開發(fā)人員傾向于使用以下語法來檢查name不為null:

          if?(name?is?object)?{?}

          但是上面的陳述既不可讀也不容易理解。這就是為什么許多開發(fā)人員仍然喜歡經(jīng)典的方式:

          if?(name?!=?null)?{?}

          但從C# 9.0開始,您可以編寫如下的非空檢查,我認(rèn)為這是真正可讀的代碼:

          if?(name?is?not?null)?{?}

          總結(jié)

          So, with C# 9.0, you can write your null / not-nulll checks like below, and I think that’s readable: 因此,使用C# 9.0,您可以編寫null/not-null檢查,如下所示,我認(rèn)為這是可讀的:

          if?(name?is?null)?{?}

          if?(name?is?not?null)?{?}

          祝您編程愉快!

          參考資料

          [1]

          這篇博文: https://www.thomasclaudiushuber.com/2020/03/19/c-why-you-should-prefer-the-is-keyword-over-the-operator/

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操片| 男女拍拍120秒 | 国产精品久久久久久久免牛肉蒲 | 黄网站欧美内射 | 狼人入口国产 |