21、c#中“?”的用途

在C#中,? 是一个多用途的符号,具有多种不同的用途,具体取决于上下文。以下是一些常见的用法:

1、可空类型(Nullable Types)

? 可以用于将值类型(如 int、bool 等)变为可空类型。例如,int? 表示一个可以为 null 的整数。

csharp 复制代码
int? nullableInt = null;
nullableInt = 5;

2、空条件运算符(Null-conditional Operator)

?. 用于在访问对象的成员(如属性或方法)时,先检查对象是否为 null,以避免 NullReferenceException。

csharp 复制代码
string str = null;
int? length = str?.Length; // length 将为 null,因为 str 是 null

3、空合并运算符(Null-coalescing Operator)

?? 用于在左侧表达式为 null 时,返回右侧的默认值。

csharp 复制代码
int? nullableInt = null;
int value = nullableInt ?? 10; // value 将为 10,因为 nullableInt 是 null

4、事件处理程序中的可选参数(不直接用 ? 表示,但相关)

在事件处理程序中,EventArgs 参数通常可以通过定义一个没有参数的处理器来忽略,这与 ? 无关,但事件订阅时可以省略参数。

csharp 复制代码
public event EventHandler MyEvent;

void OnMyEvent()
{
    MyEvent?.Invoke(this, EventArgs.Empty); // 使用空条件运算符安全调用事件
}

5、模式匹配中的 is 表达式(C# 7.0 及以上)

在类型模式匹配中,is 关键字可以与 ? 结合,用于类型检查和转换,不过这里 ? 是类型模式的一部分,用于表示可空类型。

csharp 复制代码
object obj = 5;
if (obj is int? nullableInt && nullableInt.HasValue)
{
    Console.WriteLine($"Value: {nullableInt.Value}");
}

6、三元运算符(Ternary Operator)

虽然三元运算符本身不使用 ? 作为"用途",但它是 ? : 结构的一部分,用于简单的条件判断。

csharp 复制代码
int a = 10, b = 20;
int max = (a > b) ? a : b; // max 将为 20

? 在C#中主要用于处理可空性和空值检查,帮助开发者编写更健壮和安全的代码。

相关推荐
成都易yisdong10 小时前
纬地、鸿业、海地、CASS等横断面数据互转工具V3.2——测绘与道路设计人员的效率神器
c#·visual studio code
AIKZX14 小时前
西门子博途 TIA Portal v18 中文版图文安装教程(超级详细)附下载链接
开发语言·c#·编辑器·idea
xiaoshuaishuai816 小时前
C# 数字资源分发
开发语言·c#
格林威17 小时前
面阵相机 vs 线阵相机:堡盟与Basler选型差异全解析 +C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
少控科技18 小时前
小数典 - V1.0.0.1
windows·c#
格林威18 小时前
面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
刚子编程19 小时前
推荐一个开箱即用的.NET权限管理平台:Magic.NET
.net·开源项目·权限管理·企业级框架·后台脚手架
刘~浪地球19 小时前
日志平台架构设计
c#·linq
玖笙&20 小时前
✨WPF编程进阶【9.1】:WPF资源完全指南(附源码)
c++·c#·wpf·visual studio
hhb_6181 天前
Dylan 语言核心特性与工程实践深度解析
开发语言·c#