📅  最后修改于: 2023-12-03 14:53:40.303000             🧑  作者: Mango
在 C# 8.0 中引入了一种新的特性,称为对象上的内联问号。该特性可以在访问可空类型的属性或字段时,使用简洁的语法来避免繁琐的 null 检查。
使用内联问号的基本语法如下:
var result = obj?.Property;
在上面的语法中,“obj”是一个对象,而“Property”是存在于该对象上的属性。如果该属性的类型是可空类型,则通过在属性名称后使用问号符“?”,可以避免需要显式使用 null 检查的繁琐代码。
您也可以使用内联问号来访问对象上的方法:
var result = obj?.Method();
在上述示例中,“Method”是目标对象上存在的方法。如果该方法返回 null,则您无需编写显式的 null 检查代码。
以下示例演示了内联问号的用法:
class Person
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
public int? Age { get; set; }
public string GetFullName() => $"{FirstName} {LastName}";
public string GetAgeText()
{
if (Age == null)
{
return "Unknown";
}
return $"{Age} years old";
}
}
class Program
{
static void Main(string[] args)
{
Person person = null;
// 通常情况下,需要使用 null 检查
if (person != null && person.FirstName != null && person.LastName != null)
{
Console.WriteLine(person.GetFullName());
}
else
{
Console.WriteLine("Name unknown.");
}
// 使用内联问号,避免繁琐的 null 检查
Console.WriteLine(person?.GetFullName() ?? "Name unknown.");
// 访问可空类型的属性时使用内联问号
Console.WriteLine($"Age: {person?.Age?.ToString() ?? "Unknown"}");
// 在访问方法时使用内联问号
Console.WriteLine(person?.GetAgeText() ?? "Age unknown.");
}
}
在上面的示例中,我们创建了一个名为“Person”的类,并将其存储在变量“person”中。然后,我们使用内联问号避免了繁琐的 null 检查,通过调用“GetFullName”方法来获取 person 对象上的名称。
对象上的 C# 内联问号是一种便捷的语法特性,可用于简化访问可空类型的属性或方法时的 null 检查。使用内联问号可以使代码更易于阅读和维护,减少冗余的 null 检查代码。