当前位置: 代码网 > it编程>编程语言>Asp.net > C# ?的使用小结

C# ?的使用小结

2024年11月30日 Asp.net 我要评论
可空类型标记符(?)说明:可空类型标记符?用于指示某个值类型(如int、float等)可以为null。这是c# 2.0引入的一个特性,用于处理数据库查询、json解析等场景中可能出现的空值。示例代码:

可空类型标记符(?)

说明

  • 可空类型标记符?用于指示某个值类型(如intfloat等)可以为null。这是c# 2.0引入的一个特性,用于处理数据库查询、json解析等场景中可能出现的空值。

示例代码

int? nullableint = 5;
int? nullableintwithnull = null;

if (nullableint.hasvalue)
{
    console.writeline(nullableint.value); // 输出: 5
}

if (!nullableintwithnull.hasvalue)
{
    console.writeline("the value is null."); // 输出: the value is null.
}

空值传播操作符(?.)

说明

  • 空值传播操作符?.用于在访问可能为null的对象的成员之前进行空检查。如果对象为null,则不会尝试访问其成员,而是直接返回null

示例代码

string str = null;
int? length = str?.length; // length 为 null,因为 str 为 null

person person = null;
string jobtitle = person?.jobtitle; // jobtitle 为 null,因为 person 为 null

person = new person { jobtitle = "software engineer" };
jobtitle = person?.jobtitle; // jobtitle 为 "software engineer"

条件(三元)运算符(?:)

说明

  • 条件运算符?:是c#中的三元运算符,用于根据条件选择两个值之一。其语法为condition ? expression1 : expression2

示例代码

int x = 10;
int y = 5;
int max = x > y ? x : y; // max 为 10

console.writeline("最大值: " + max);

空值合并操作符(??)

说明

  • 空值合并操作符??用于在第一个操作数为null时返回第二个操作数的值,否则返回第一个操作数的值。这常用于提供默认值以避免null引发的异常。

示例代码

string name = null;
string displayname = name ?? "匿名用户"; // displayname 为 "匿名用户"

string username = "developerdave";
displayname = username ?? "newbie"; // displayname 为 "developerdave",因为 username 不为 null

console.writeline(displayname);

空值合并赋值运算符(??=)

说明

  • 空值合并赋值运算符??=是c# 8.0及更高版本中引入的一个特性,它结合了空值合并运算符(??)和赋值运算符(=)的功能。这个运算符用于将右侧的值赋给左侧的变量,但仅当左侧的变量为null时。如果左侧的变量不为null,则不会更改其值。这提供了一种更简洁的方式来为可能为null的变量提供默认值或更新它们的值,而无需编写额外的if语句。

示例代码

string firstname = null;
firstname ??= "未知"; // 如果 firstname 是 null,则将其设置为 "未知"
console.writeline(firstname); // 输出: 未知

firstname = "john";
firstname ??= "未知"; // firstname 不是 null,所以不会更改其值
console.writeline(firstname); // 输出: john

// 示例使用可空类型
int? age = null;
age ??= 30; // 如果 age 是 null,则将其设置为 30
console.writeline(age.hasvalue ? age.value.tostring() : "null"); // 输出: 30

age = 25;
age ??= 30; // age 不是 null,所以不会更改其值
console.writeline(age.hasvalue ? age.value.tostring() : "null"); // 输出: 25

// 示例使用类对象的属性
person person = null;
person ??= new person { name = "默认名称" }; // 如果 person 是 null,则创建新实例并赋值
if (person != null)
{
    console.writeline(person.name); // 如果 person 是新创建的实例,则输出: 默认名称
}

person = new person { name = "john doe" };
person.name ??= "默认名称"; // person.name 不是 null,所以不会更改其值
console.writeline(person.name); // 输出: john doe

在上面的示例中,??= 运算符首先检查左侧的变量(或属性)是否为null。如果是,则将其设置为右侧的值;如果不是,则保持其当前值不变。这种操作对于初始化可能为null的变量或在某些条件下更新它们非常有用。

请注意,最后一个示例中尝试使用??=来更新person对象的name属性可能不会按预期工作,因为??=是专门为变量赋值设计的,而不是用于属性的。在属性上使用??=会导致编译错误,除非该属性是特殊的(如可空值类型的自动实现属性)。

到此这篇关于c# ?的使用小结的文章就介绍到这了,更多相关c# ?使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com