C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# ?使用

C# ?的使用小结

作者:語衣

本文介绍了C#中可空类型标记符(?)及其相关运算符的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

可空类型标记符(?)

说明

示例代码

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.
}

空值传播操作符(?.)

说明

示例代码

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"

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

说明

示例代码

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

Console.WriteLine("最大值: " + max);

空值合并操作符(??)

说明

示例代码

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

string username = "DeveloperDave";
displayName = username ?? "Newbie"; // displayName 为 "DeveloperDave",因为 username 不为 null

Console.WriteLine(displayName);

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

说明

示例代码

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# ?使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文