首页 > 编程语言 >在C#语言里对NULL的简化赋值

在C#语言里对NULL的简化赋值

时间:2023-11-16 14:44:06浏览次数:42  
标签:null name C# Unknown 运算符 操作符 NULL string 赋值

 

1 、NULL合并操作符(??)

null合并操作符(??)是一个简写操作符,用于在左侧对象不为null时返回左侧值,在左侧对象为null时返回右侧值。当您在判断当前对象值是否null值并且赋值新对象需要简写时,此操作符非常有用。

string name = null;
string result = name ?? "Unknown";
Console.WriteLine(result); // Output: Unknown

在上面的示例中,由于name的值为null,因此使用null合并运算符将“Unknown”的值赋给result。

 

2. 条件运算符 (?:)

条件运算符(?:)是一个三元运算符,用于代替if-else的简写,如果条件为真则返回一个值,如果条件为假则返回另一个值。当需要根据条件提供默认值时,此操作符很有用。

string name = null;
string result = (name != null) ? name : "Unknown";
Console.WriteLine(result); // Output: Unknown

在上面的例子中,由于name的值为null,因此使用条件运算符将“Unknown”的值赋给result。

3. 空条件运算符(?.)

如果对象不为空,则使用空条件操作符(?.)访问对象的成员,否则返回空。当您需要访问可能为空的对象的属性或方法时,此操作符非常有用。

string name = null;
int? length = name?.Length;
Console.WriteLine(length); // Output: null

在上面的例子中,因为name的值是空的,所以length的值也是空的。

但你也可以利用 合并操作运算符(??) 进行进阶的写法,代码如下:

string name = null;
int length = name?.Length??0;
Console.WriteLine(length); // Output: 0

可以看到上面的代码例子里,length可以不用空的值类型获取name的长度,可以在你的业务逻辑里认为null的字符串长度也可以是0长度,减少后期值类型的复杂判断。

4. 空合并赋值操作符 (??=)

空合并赋值操作符(??=)用于在左侧对象为空时将右侧对象赋值给左侧。意思就是如果变量对象为空,可以给它赋值一个默认对象值,在理解上它可以简化代码并使其更加简洁。

string name = null;
name ??= "Unknown";
Console.WriteLine(name); // Output: Unknown

在上面的示例中,由于name的值为空,因此使用空合并赋值操作符将“Unknown”的值赋给name。

5. 宽容运算符 (!.)

允许为空的操作符(!.)用于告诉编译器值不为空,即使编译器无法确定该值不为空。当您知道一个值不会为空,但编译器无法确定它不会为空时,此操作符很有用。

string name = null!;
int length = name.Length;
Console.WriteLine(length); // Output: System.NullReferenceException

在上面的例子中,宽容操作符用于告诉编译器name的值不可为空。但是,由于name的值实际上是空的,所以系统在运行时抛出NullReferenceException。

6. 使用 is 运算符

在C#编程语言中,“is”操作符是一个关键字,用于检查变量是否与特定类型兼容。随着C#7.0中常量模式的引入,这个运算符获得了额外的功能。具体来说,现在可以使用“is”操作符将值与常量(如null)进行比较。

if (name is null)
{
   // code to execute
}
Console.WriteLine(name);

使用“is”运算符的扩展功能使开发人员能够在c#应用程序中执行类型检查和比较时编写更简洁、更可读的代码。

或者,您也可以使用操作符检查:==null

object obj = null;

if (obj == null)
{
    // do something if obj is null
}
else
{
    // do something else if obj is not null
}

这两种方法都可以,但是使用操作符进行检查可能更具可读性和表现力,特别是当与其他类型检查 is null 结合使用时。

7. ArgumentNullException 参数空异常

最后,ArgumentNullException类用于处理传递给方法或构造函数的空参数。当您需要确保传递给方法或构造函数的参数不为空时,该类非常有用。

public void DoSomething(string name)
{
    if (name == null)
    {
        throw new ArgumentNullException(nameof(name));
    }
    
    Console.WriteLine($"Hello, {name}!");
}

// Usage
DoSomething(null); // Output: System.ArgumentNullException: Value cannot be null. (Parameter 'name')

在上面的例子中,ArgumentNullException类用于在name的值为空时抛出异常。

标签:null,name,C#,Unknown,运算符,操作符,NULL,string,赋值
From: https://www.cnblogs.com/qingjiawen/p/17836207.html

相关文章

  • java对象类型强转 java将object强转为list对象
    List类型的Object数据需要遍历操作时,需要将Object类型转换为List类型,转换方式如下。/***object转list*@paramobj需要转换的List对象*@paramclazzList中元素的class*@param<T>*@return*/publicstatic<T>List<T>......
  • 软件分类——博客园标签分类以及“博客网页编辑博客,如何插入Excel中的表格,并且可在网
    .NET技术:后端开发:软件设计:前端开发:企业信息化:移动端开发:软件工程:数据库:操作系统:其他分类:.NET新手区Java架构设计Html/CssBPMAndroid开发敏捷开发SQLServerWindows非技术区ASP.NETPython面向对象JavaScriptSharePointiOS开发项目与团队管理Orac......
  • ChatGPT的训练费用以及成功原因
     参考:https://baijiahao.baidu.com/s?id=1772914234034992726&wfr=spider&for=pc  ================================  关于ChatGPT的成功原因,引用国产大模型混战加速,速成幻觉又是一场大厂陪跑赛?中的回答:益于ChatGPT商业和营销方面的成功,能够瞬间让人们目睹了大模型......
  • Vscode 更新之后连不上服务器的解决方案
    参考这里有一点不一样:不需要删除.vscodeserver<参考的博文:原文:删掉整个.vscodeserver目录,然后重新生成(重新连接,失败后就重新生成了)>只需要删除.vscodeserver\bin\下的文件夹,他们就是不同版本的server然后新建那个$COMMIT_ID的文件夹就可以了,这一步参考上文。再然后再链接就......
  • gin-vue-admin 接口错误Error: Request failed with status code 500
    本地运行以后登录出现:控制台检查发现是请求getMenu出现500错误,并且后端出现"Error1071(42000):Specifiedkeywastoolong;maxkeylengthis1000bytes"错误,那就是数据库casbin_rule的表引擎不是InnoDB,更改成InnoDB即可。ALTERTABLEcasbin_ruleENGINE=InnoDB;......
  • Internet Explorer cannot open the Internet site - Operation aborted
     InternetExplorercannotopentheInternetsite-Operationabortedhttp://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/334e42a4-241d-4ca0-9521-c805660921f8 OflatefewofmyblogreadersusingInternetexplorerpointedouttomethatth......
  • React Native开发App应用程序有哪些优缺点?
    Hello,各位同学们好,我是咕噜铁蛋!今天呢我和大家讲讲另外一种移动应用开发框架reactnative。在快节奏的市场竞争中,企业和开发者追求同时在不同平台上快速发布应用,而跨平台开发框架正是满足这一需求的理想选择之一。作为Facebook推出的开源跨平台移动应用开发框架,ReactNative自2015......
  • 部署基于 mt-channel-broker 的 broker
    安装in-memory-channel下载in-memory-channel#wgethttps://github.com/knative/eventing/releases/download/knative-v1.12.0/in-memory-channel.yaml替换gcr.io #sed-i'[email protected]@gcr.dockerproxy.com@g'in-memory-channel.yaml创建in-memory-channel资源#k......
  • VS 2005/2008 Web Setup Project
     Tip/Trick:CreatingPackagedASP.NETSetupProgramswithVS2005http://weblogs.asp.net/scottgu/archive/2007/06/15/tip-trick-creating-packaged-asp-net-setup-programs-with-vs-2005.aspx 如何用VS2005制作Web安装程序 TwoQuickTipsonWebSetupinVisualStudioh......
  • 文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题
    二、用go语言,假设将一个长度为r的字符串散列到m个槽中,并将其视为一个以128为基数的数,要求应用除法散列法。我们可以很容易地把数m表示为一个32位的机器字,但对长度为r的字符串,由于它被当做以128为基数的数来处理,就要占用若干个机器字。假设应用除法散列法来计算一个字符串......