C# 中 ?、??、??=、?: 、?. 、?[] 各种问号的用法和说明
在 C# 中问号?远不止是一个简单的标点符号。随着语言版本的迭代更新C# 围绕问号?发展出了一套强大而优雅的空值处理和条件表达机制。熟练掌握这些操作运算符不仅能大幅提升代码的简洁性和可读性还能有效避免恼人的空引用异常构建更加健壮的应用程序。可空类型修饰符?在 C# 中值类型如int、long、bool、DateTime等默认不能为null。使用 ? 修饰符我们可以将值类型转换为可空类型。MSDN上面的解释在处理数据库和其他包含不可赋值的元素的数据类型时将 null 赋值给数值类型或布尔型以及日期类型的功能特别有用。例如数据库中的布尔型字段可以存储值 true 或 false或者该字段也可以未定义。int notNullableInt;// 非空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 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null则此运算符将返回左操作数左边表达式否则当左操作数为 null返回右操作数右边表达式int? x null;//定义可空类型变量 int? y x ?? 1000;//使用合并运算符当变量x为null时预设赋值1000 Console.WriteLine(y.ToString()); //1000Null 合并赋值运算符??C# 8.0 引入的运算符仅当左操作数为null时才将右操作数的值赋给左操作数。这是懒加载模式的理想选择。static void Main(string[] args) { string? name null; name ?? 追风; Console.WriteLine(name); // 追风 //惰性初始化 Dictionarystring, string? cache null; cache ?? new Dictionarystring, 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则正常访问成员。static void Main(string[] args) { // 基本用法 Person person null; string name person?.Name; // 不会抛出异常name 为 null Console.WriteLine(name ?? name is null); // 输出: name is null }Null 条件索引访问运算符 (?[])Null 条件索引访问运算符 (?[]) 在使用索引器访问集合元素前先检查集合对象是否为 null。如果集合为 null整个表达式返回 null 而不会抛出异常如果集合不为 null则正常访问索引位置的元素。static void Main(string[] args) { Liststring names null; string firstName names?[0]; // 不会抛出异常firstName 为 null Console.WriteLine(firstName ?? No names available); // 输出: No names available // 初始化列表后访问 names new Liststring { 雪, 阳光, 汽车 }; string secondName names?[0]; // 安全访问索引为0的元素 Console.WriteLine(secondName); // 输出: 雪 }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425882.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!