<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C# 項目的 nullable 檢查

      C# nullable 按照修飾變量類型不同, 分成兩種情況:

      1. nullable value type,  照常理來講, value 類型的變量不能設為null, 在C# 2.0為了方便程序員使用基礎類型變量來存儲DB null值, 為value type引入的 nullable 特性, 比如 int? a=null , 這里的 int? 相當于 Nullable<int>.

      2. nullable ref type, 照常理來講, ref 類型變量天然可以設置為null, 但當今計算機語言界認為這種隱含的可以賦值為null的變量, 會引起很多預期之外的問題, 所以現在的編程語言都傾向于更嚴格限制null,  C# 8為了響應這一潮流也對ref type 可空性做了限制,

         簡言之,  ref type的nullable特性, 是用來限制 ref type 賦值為 null,  盡量規避 NullReferenceException 異常;    而 value type的 nullable 特性為值類型增加可空的能力, 因為是基于值類型, 所以并不會意外產生 NullReferenceException 異常. 

       

      下面是一個table和對象的字段映射定義,

      CREATE TABLE [dbo].[People](
          [Name] [nvarchar](50) NOT NULL,
          [BirthDate] [datetime] NULL,
          [FavoriteMovie] [nvarchar](50) NULL,
          [FavoriteNumber] [int] NULL
      ) ON [PRIMARY]
      

      //BirthDate and FavoriteNumber are nullable value types (nullable DateTime and nullable int respectively).
      //FavoriteMovie is a string, which is nullable (it’s a reference type).
      public class Person { public string Name { get; set; } public DateTime? BirthDate { get; set; } public string? FavoriteMovie { get; set; } public int? FavoriteNumber { get; set; } }

       

       

      在C#7(含7)之前 reference 變量可以為null , 但在C#8為了盡量避免 NullReferenceException 異常,引入了breaking change, 默認情況下reference 不可為null.

      //C# 7
      private string str=null ;
      
      //C# 8
      private string str; //不能為null
      
      //C# 8, 如果需要為空
      private string? str=null ;
      
      
      .Net6 生成的項目, 默認會啟用 nullable 檢查, 即對于 ref 類型限制 null 賦值, 以便盡可能避免 NullReferenceException 異常, 但這僅僅是個編譯警告, 并不會導致編譯錯誤.
       csproj 文件設置. 如果要上升到報錯級別, 需要設置 <TreatWarningsAsErrors>true</TreatWarningsAsErrors>  , 為了防止編譯器報錯太多無關緊要的告警, 可以通過<NoWarn>將這些報警編號忽略掉.
      <PropertyGroup>
          <TargetFramework>net6.0</TargetFramework>
          <Nullable>enable</Nullable>
          <ImplicitUsings>enable</ImplicitUsings>
      <NoWarn>CS8618</NoWarn>
      </PropertyGroup>

      Nullable 檢查機制底層是通過 nullable context來實現的,  該上下文提供兩種特性, 第1特性是將string? 這樣的類型編譯到二進制文件中, 即二進制文件中保留  annotations metadata, 第2個特性是, 編譯過程會生成相關的告警.

      所以 <Nullabe> 的取值有 enable/disable/warnings/annotations 4種, 4種類型涉及兩個維度, 警告上下文和注解上下文的開啟, 

      enable: 同時開啟nullable context的兩個特性

      disable: 完全關閉 nullable context 的兩個特性,  代碼中也不允許通過 string? 來定義變量.

      warnings:  關閉注解上下文, 僅僅開啟警告上下文, 簡單理解: 編譯器不會將nullable相關的類型 metadata 編譯到二進制文件, 但編譯過程對于違反nullable規則,  會報 warning. 

      annotations: 開啟  annotations 特性, 但關閉編譯器告警. 

       

      實際項目的問題:

       

       

       

      問題1: 我們能確定賦值不會為null, 但編譯器推斷為空, 怎么調教編譯器呢?

      方案: 在代碼中加上下面的方法即可. 

      ArgumentNullException.ThrowIfNull(keyValuePairs);

       

      問題2:  [DisallowNull] 注解和 T 的區別, [AllowNull] 和  T? 和Nullable<T> 的區別:  

      [DisallowNull] string a1="a" ;   string a2="a"; 

      上面代碼在C#8是沒有區別的,  [DisallowNull] 常用于泛型類定義.

       

      [AllowNull] string a1="a" ;   string? a2="a";  Nullable<string> a3="a";

      上面代碼在C#8是沒有區別的,  [AllowNull] 常用于泛型類定義.

       

      問題3: 強制干預編譯器賦null值 

      string a = null;     // warning
      string b = null!;    // ok
      string c = default!; // ok

       

      問題4: 如何為老項目啟用nullable檢查

      csproj文件中, 啟用nullable檢查, 

      然后先為每個cs文件加上下面的指令

      #nullable disable

      然后一個一個文件開啟, 并修正代碼. 

       

      =================================

      參考

      =================================

      C# 8: Nullable Reference Types - Meziantou's blog

      C# 8.0 如何在項目中開啟可空引用類型的支持 - walterlv 

      可為空引用類型 | Microsoft Docs

      posted @ 2021-11-16 23:33  harrychinese  閱讀(3658)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 熟女人妻aⅴ一区二区三区电影| 亚洲AV成人无码精品电影在线 | 波多野结衣乳喷高潮视频| 国产成人午夜福利在线观看| 国产成人av电影在线观看第一页| 2021久久精品国产99国产精品 | 久久国内精品自在自线观看| 国产免费一区二区三区在线观看| 亚洲av久久精品狠狠爱av| 日韩中文日韩中文字幕亚| 亚洲国产色播AV在线| 日韩中文字幕精品人妻| 人妻精品久久无码区 | 国产高清自产拍av在线| 国产婷婷精品av在线| 日韩精品一区二区三区影院| av在线播放观看国产| 久久午夜私人影院| 99在线精品国自产拍中文字幕| 色婷婷五月综合久久| 亚洲高清WWW色好看美女| 久久国产精品日本波多野结衣| 自拍偷拍一区二区三区四| 亚洲另类无码专区国内精品| 久久综合伊人77777| 偷拍视频一区二区三区四区| 精品无人乱码一区二区三区的优势 | 久久精品国产亚洲AⅤ无码| 91人妻熟妇在线视频| 久久婷婷五月综合97色直播| 国产AV影片麻豆精品传媒| 男女18禁啪啪无遮挡激烈网站| 婷婷综合久久狠狠色成人网| 天天看片视频免费观看| 国产91成人亚洲综合在线| 男人的天堂av一二三区| 熟女人妻aⅴ一区二区三区电影| 丁香五月婷激情综合第九色| 日韩精品av一区二区三区| 亚洲va中文字幕无码久久不卡| 日本高清无卡码一区二区|