首页 > 编程语言 >【C#】-弃元(_)的使用

【C#】-弃元(_)的使用

时间:2023-05-26 13:11:15浏览次数:32  
标签:Console string val C# 弃元 int 使用

从 C# 7.0 开始,C# 支持弃元,这是一种在应用程序代码中人为取消使用的占位符变量。

简单来说,弃元的作用就是告诉编译器和其他读取代码的文件你打算忽略表达式的结果。当我们不需要或不使用赋值的结果时,就可以使用弃元。

我们在代码中一定遇到过这种苦恼:

static void Main(string[] args)
{
string val = "123";
if (int.TryParse(val,out int t1))
{
Console.WriteLine("int类型");
}
}
此时,我们并不需要使用到返回的值,但是方法又规定必须传递out的值,此时,我们就可以这样实现代码:

static void Main(string[] args)
{
string val = "123";
if (int.TryParse(val,out _))
{
Console.WriteLine("int类型");
}
}
除了out之外,我们还可以在元组和对象析构、witch等语句中使用弃元写出优雅代码

例如,下面的例子我们只希望使用到日期中的年份。

var (year,_,_) = GetDate();

private (string,string,string) GetDate()
{
//...
return (year,month,day);
}
例如,我们在switch的模式匹配中不期望对指定类型的对象进行使用。

Foo("10");

void Foo(object item)
{
switch (item)
{
case int val:
Console.WriteLine(val);
break;
case string _:
Console.WriteLine("Error");
break;
}
}
例如,我们使用独立弃元抛出错误。

public static void Method(string arg)
{
_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");

// Do work with arg.
}
但是,我们在使用弃元的时候也需要注意,当_被当作有效变量时,则不能使用弃元。例如:

private static void ShowValue(int _)
{
byte[] arr = { 0, 0, 1, 2 };
_ = BitConverter.ToInt32(arr, 0);
Console.WriteLine(_);
}
// The example displays the following output:
// 33619968
从 C# 9.0 开始,可以使用弃元指定 lambda 表达式中不使用的两个或更多输入参数:

Func<int, int, int> constant = (_, _) => 42;
注意:为了向后兼容,如果只有一个输入参数命名为 _,则在 lambda 表达式中,_ 将被视为该参数的名称。

使用弃元好处:

使代码意图更加明确。增强其可读性和可维护性。
节省内存空间,当 _ 是有效弃元时,并不会分配内存。
————————————————
版权声明:本文为CSDN博主「丿灬鑫崽丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38037668/article/details/125159169

标签:Console,string,val,C#,弃元,int,使用
From: https://www.cnblogs.com/VisionCodeBlog/p/17434454.html

相关文章

  • OnlineDictionary 倒计时体会
     电子辞典终于要结项了,这几天没命写报告,怎么会有这么多报告要写?GOD!有印象的生活是张开眼就开始写报告,画图,写到睡觉。Why theywant somanykindsofreports?真是要人命!  这次的项目,说实话,学到了很多,团队合作,互相体谅,技术学习。这些都是不可言谈的经......
  • 【MCA】Java互联网高级架构师马SB
    【MCA】Java互联网高级架构师马SBdownload:3w51xuebccomgRPC云原生微服务开发随着企业信息化建设的不断深入,以及互联网技术的快速发展,微服务架构已经成为当前比较热门的一种架构风格。而gRPC则是一种基于HTTP/2协议的高性能、低延迟的RPC框架,非常适合用于构建微服务。什么是gRPC?gR......
  • 设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计
    项目简介在过去几十年,风景园林经历了从“刀耕火种”的完全手绘设计时代到当下比较流行的参数化设计时代,过去的每一轮技术革新都让风景园林作品的表现形式产生了巨大的改变。随着计算机图像技术的发展,我们有更多的建模和渲染软件辅助提升图纸表现效果,但表现效果提升的背后伴随的是越......
  • COMP612 计算机图形
    COMP612ComputerGraphicsProgrammingSemester1,2023Project:HelicopterSceneThisisanindividualassignment.Allworkyousubmitmustbeentirelyyourown.Theassignmentisworth70%andwillbemarkedoutof100.•Youmustworkfromtheprovidedanima......
  • cuda版本和显卡计算能力
    nvidia不同架构的显卡有不同的ComputeCapability,不同版本的cuda支持的ComputeCapability不同,所以安装cuda要支持该显卡对应的ComputeCapability。显卡的ComputeCapability查看:https://developer.nvidia.com/cuda-gpus#compute中文版:https://developer.nvidia.com/zh-cn/cu......
  • vue3 reactive响应式赋值页面不渲染问题
    问题描述://声明变量letdata=reactive([]);http().then(res=>{data=res.dataconsole.log(data)})//data数据更新,页面没有渲染,1、因数据结构而导致的未渲染解决方法:依旧是reactive,可以在外面包一层//声明letstate=reactive({data:[]})//赋值state......
  • Spring6 探析之@Configuration 注解
    Spring6探析之@Configuration注解介绍@Configuration注解大家都不陌生,该注解有以下特点必须在类上使用能够将被注解的类加载到IOC容器里能够将类中被@Bean注解标记的方法加载到IOC容器里@Configuration有一些参数,其中最值得关注的是proxyBeanMethods,该参数值默认为tr......
  • 修改docker默认存储路径
    docker消耗内存太严重!!必须申请一个大硬盘,然后修改默认存储路径  停止docker服务servicedockerstopcopy数据到新的存放路径cp-r/var/lib/docker/* /data/docker重命名/var/lib/docker  mv/var/lib/docker/var/lib/dockerbak创建软连接ln-......
  • Navicat 入门及免费安装指南:轻松管理您的数据库
    引言在当今数据驱动的时代,良好的数据库管理对于企业和个人开发者而言都是至关重要的。为了更高效地处理数据库相关任务,用户需要一款强大且易用的数据库管理工具。这就是今天我们要讲述的Navicat。Navicat是一款支持多种主流数据库类型(如MySQL、MariaDB、Oracle以及PostgreSQ......
  • MT4电脑版交易软件使用技巧有哪些?
    MT4交易软件作为连接券商平台与投资者之间的纽带,不仅是外汇金融机构的首选交易平台,也因其显著的优势成为了外汇投资者进行网上交易的重要平台。而MT4交易软件又分为电脑版和手机版,因为大多数投资者进行外汇投资时使用的是MT4电脑版软件,所以本文就来主要讲讲:MT4电脑版交易软件使用技......