zoukankan      html  css  js  c++  java
  • .NET 5 带来的新特性 [MemberNotNull] 与 [MemberNotNullWhen]

    MemberNotNullAttribute 是 .NET 5 的新增特性,位于System.Diagnostics.CodeAnalysis。该特性用于显式声明,调用此方法后该值不再为 Null。
    示例如下,创建一个 csproj,启用 C# 8.0 的空引用类型新特性。

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <Nullable>enable</Nullable>
        <WarningsAsErrors>$(WarningsAsErrors);CS8600;CS8602;CS8603;CS8618;CS8625</WarningsAsErrors>
      </PropertyGroup>
    </Project>

    如下图所示,由于编译器无法保证 _mayNullStr.Length 不会引发空引用异常,所以抛出编译错误 CS8602;


    此时可以通过添加 MemberNotNull 特性,显式地告诉编译器方法 PromisStrNotNull() 可以保证 _mayNullStr 不为 Null。


    此外他还有一个姊妹 MemberNotNullWhenAttribute

    /// <summary>
    /// 返回 true 时,<see cref="_mayNullStr"/> 不为 null
    /// </summary>
    /// <returns></returns>
    [MemberNotNullWhen(true, nameof(_mayNullStr))]
    private bool StrNotNullWhenReturnTrue()
    {
        if (DateTime.Now.DayOfWeek == DayOfWeek.Friday)
        {
            _mayNullStr = "明天不用上班啦!";
            return true;
        }
        _mayNullStr = null;
        return false;
    }
  • 相关阅读:
    Windows下MySQL多实例运行
    Java中,什么时候用logger.debuge,info,error
    乒乓球(Table Tennis)
    [Delphi]Delphi学习
    [CALL]01
    [转自看雪]新手学习计划
    [JAVA]函数
    [1.1]
    [SQL]课堂记录
    [SYS]VS2010驱动开发配置
  • 原文地址:https://www.cnblogs.com/surbowl/p/14012631.html
Copyright © 2011-2022 走看看