重新建设网站的报告,做海报的话网站,免费域名申请教程,网上提交报名表系统的网站建设阅读本文大概需要不到 1 分钟。弃元#xff08;Discards#xff09; 是在 C# 7.0 的时候开始支持的#xff0c;它是一种人为丢弃不使用的临时虚拟变量。语法上它是用来赋值的#xff0c;但它却不被分配存储空间#xff0c;即没有值#xff0c;所以不能从中读取值。弃元用… 阅读本文大概需要不到 1 分钟。弃元Discards 是在 C# 7.0 的时候开始支持的它是一种人为丢弃不使用的临时虚拟变量。语法上它是用来赋值的但它却不被分配存储空间即没有值所以不能从中读取值。弃元用 _(下划线) 表示下划线是一个关键字只能赋值不能读取例如在 C# 7.0 中弃元的使用场景主要有下面四种元组和对象的解构使用 is 和 switch 的模式匹配对具有 out 参数的方法的调用作用域内独立使用场景针对这几个场景用下面的几段代码演示一下。场景一元组/对象的解构var tuple (1, 2, 3, 4, 5);
(_, _, _, _, var fifth) tuple;场景二使用 is/switch 的模式匹配var obj CultureInfo.CurrentCulture.DateTimeFormat;switch (obj)
{case IFormatProvider fmt:Console.WriteLine(${fmt} object);break;case null:Console.Write(A null object reference);break;case object _:Console.WriteLine(Some object type without format information);break;
}if (obj is object _)
{...
}场景三对具有 out 参数的方法的调用var point new Point(10, 10);
// 只要 x, 不关心 y
point.GetCoordinates(out int x, out _);场景四作用域内独立使用场景void Test(Dto dto)
{_ dto ?? throw new ArgumentNullException(nameof(dto));
}理解了弃元也了解了弃元的四种使用场景那么对下面这个 C# 9.0 新支持的弃元使用场景就容易理解了。C# 9.0 对弃元增加了一种场景支持Lambda 参数也包括匿名方法参数。示例// C# 9 之前
Funcint, int, int zero (a, b) 0;
Funcint, int, int func delegate (int a, int b) { return 0; };// C# 9
Funcint, int, int zero (_, _) 0;
Funcint, int, int func delegate (int _, int _) { return 0; };在 C# 9 之前即便不使用的 Lambda 参数也需要给它命名。C# 9 支持弃元参数一方面简化了命名另一方面也节省了内存分配。更重要的是它使得编程的意图更明确让人一看就知道这个参数是不用的增强了代码的可读性和可维护性。参考[Discards - C# Guide] http://dwz.date/bpuV