您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。
摘要:前言 在 C# 中,问号(?)远不止是一个简单的标点符号。随着语言版本的迭代更新,C# 围绕问号(?)发展出了一套强大而优雅的空值处理和条件表达机制。熟练掌握这些操作运算符不仅能大幅提升代码的简洁性和可读性,还能有效避免恼人的空引用异常,构
前言
在 C# 中,问号(?)远不止是一个简单的标点符号。随着语言版本的迭代更新,C# 围绕问号(?)发展出了一套强大而优雅的空值处理和条件表达机制。熟练掌握这些操作运算符不仅能大幅提升代码的简洁性和可读性,还能有效避免恼人的空引用异常,构建更加健壮的应用程序。
可空类型修饰符(?)
在 C# 中,值类型(如int、long、bool、DateTime等)默认不能为null。使用 ? 修饰符,我们可以将值类型转换为可空类型。
intnotNullableInt;// 非空int类型默认为 0
int? nullableInt =null;
bool? nullableBool =null;
long? nullableLong =null;
DateTime? nullableDate =null;
// 检查是否有值
if(nullableInt.HasValue)
{
Console.WriteLine($"整数值:{nullableInt.Value}");
}
else
{
Console.WriteLine("变量没有值(为null)");
}
Null 合并运算符(??)
Null 合并运算符(??)如果左边的值不为null,则返回左边的值,否则返回右边的值。
staticvoidMain(string[] args)
{
stringuserName1 ="小明";
stringuserName2 =null;
vargetUserName = userName1 ?? userName2 ??"默认用户";
Console.WriteLine(getUserName);// 输出: 小明
stringconfig1 =null;
stringconfig2 =null;
stringconfig3 ="DefaultConfig";
stringfinalConfig = config1 ?? config2 ?? config3 ??"FallbackConfig";
Console.WriteLine(finalConfig);// 输出: DefaultConfig
}
Null 合并赋值运算符(??=)
C# 8.0 引入的运算符,仅当左操作数为null时,才将右操作数的值赋给左操作数。这是懒加载模式的理想选择。
staticvoidMain(string[] args)
{
string? name =null;
name ??="时光者";
Console.WriteLine(name);// 时光者
name ??="大姚";// 不改变
Console.WriteLine(name);// 时光者
//惰性初始化
Dictionary<string,string>? cache =null;
cache ??=newDictionary<string,string>();
cache["UserName"] = name;
Console.WriteLine(cache["UserName"]);
}
三元条件运算符(?:)
条件运算符(?:),又称三元运算符,是一种简洁的条件表达式形式。它对布尔表达式进行求值,并根据结果为true或false,选择性地返回两个表达式中的对应结果,为简单条件判断提供了一种比传统if-else语句更紧凑、表达力更强的语法形式。
static void Main(string[] args)
{
int score = 80;
string level = score >= 60 ?"Pass":"Fail";
Console.WriteLine(level);
}
Null 条件成员访问运算符 (?.)
Null 条件成员访问运算符 (?.) 在访问对象成员(属性、方法、字段等)前先检查对象是否为 null。如果对象为 null,整个表达式返回 null 而不会抛出 NullReferenceException;如果对象不为 null,则正常访问成员。
