青春须早为,岂能长少年。这篇文章主要讲述调用带有 out 参数的方法时检查弃元参数 #yyds干货盘点#相关的知识,希望能为你提供帮助。
前言C# 支持弃元,弃元是应用程序代码中故意未使用的占位符变量。弃元将意图传达给编译器和读取代码的其他人:你打算忽略表达式的结果。
通过为变量分配下划线(??_?
?)作为其名称,可以指示变量是弃元变量。
例如下列代码:
if (DateTime.TryParse(dateString, out _))
Console.WriteLine($"dateString: valid");
那么,如果能够知道 out 参数是弃元变量,程序代码就可以不对它进行赋值,对于存在复杂逻辑的情况下可以提高性能。
CallerArgumentExpression既然下划线(?
?_?
?)作为弃元变量的名称,那么只需要在方法内部得到变量的名称即可。还记得我们在《??.NET 6新特性试用 | ArgumentNullException卫语句???》发现的?
?CallerArgumentExpression?
?属性声明吗?public static void ThrowIfNull([NotNull] object? argument, [CallerArgumentExpression("argument")] string? paramName = null)
在编译时,编译器会把上面的代码编译成如下形式,传入了参数名:
ArgumentNullException.ThrowIfNull(weatherForecast, "weatherForecast");
实现【调用带有 out 参数的方法时检查弃元参数 #yyds干货盘点#】利用?
?CallerArgumentExpression?
?可以轻松达到我们的目的:Demo(out _);
void Demo(out int a, [CallerArgumentExpression("a")] string paramAName = "")
a = default;
if (paramAName != "_")
System.Threading.Thread.Sleep(60000); //复杂逻辑
a = 1;
仅在未使用弃元时才尝试计算 out 参数的值。
结论但是,这种方式没法对输出参数是弃元变量的情况进行优化:
(_, _, area) = city.GetCityInformation(cityName);
?对于弃元大家有什么想法,欢迎到我的公众号“My IO”留言讨论?
推荐阅读
- #yyds干货盘点#Leetcode 26. 删除有序数组中的重复项
- 应用执行相同的查询从数据库获取bytea类型的数据获取结果不一致
- 3分钟,看懂多版本ABtest怎么做
- 如何写出高效的软件测试用例(微信朋友圈动态发送为例)
- ETCD 应急方案
- AI人脸识别测温一体机设计
- Ubuntu20.04配置开机自启动脚本
- 风控中英文术语手册(银行_消费金融信贷业务)_v6
- Dockerfile构建镜像