写点什么

.NET6 新东西 --CallerArgumentExpression

作者:喵叔
  • 2021 年 11 月 14 日
  • 本文字数:888 字

    阅读完需:约 3 分钟

在.NET6 中我们可以使用 CallerArgumentExpression 很方便的获取调用方的信息,它可以帮助开发人员简化很多代码,让代码更加简洁。下面我们就来讲解一下吧。其实在很早.NET 就支持自动获取调用方的信息了,在.NET6 以前我们如果要获取调用方的信息可以使用这三个 Caller Info Attribute:


  • CallerMemberName:调用方名称,方法名或者属性名;

  • CallerFilePath:调用方源代码的位置;

  • CallerLineNumber:调用方位于源代码的第几行。


具体的使用方法是在方法参数中加入上面任意一个属性就可以获取调用方对应的信息,例如下面的代码:


using System.Runtime.CompilerServices;
Console.WriteLine("Hello, World!");DumpCallerInfo();static void DumpCallerInfo([CallerFilePath] string? callerFilePath = null, [CallerLineNumber] int? callerLineNumber = null, [CallerMemberName] string? callerMemberName = null){ Console.WriteLine("Caller info:"); Console.WriteLine($@"CallerFilePath: {callerFilePath} CallerLineNumber: {callerLineNumber} CallerMemberName: {callerMemberName}");}
复制代码


这里要注意的是 CallerLineNumber 的类型是 int,所以对应的参数类型就只能是 int、int?或者 long。上面代码运行输出的结果是:



同样,新增的 CallerArgumentExpression 也是一种 caller info,一般会用它来自动获取传进来的参数表达式,例如:


using System.Runtime.CompilerServices;
Console.WriteLine("Hello, World!");DumpCallerInfo("张三");static void DumpCallerInfo(string name,[CallerArgumentExpression("name")] string? CallerArgumentExpression=null){ Console.WriteLine("Caller info:"); Console.WriteLine(CallerArgumentExpression);}
复制代码



如果没有变量名和属性名则会显示 value 的字面量,如果传进来的是一个表达式,则会显示出变大时本身。这相比前面所说的那三个 Attribute 来说代码简化了很多。在.NET6 中的 ArgumentNullException.ThrowIfNull()方法就是利用 CallerArgumentExpression 实现的。本篇文章只是简单的讲解了一下 CallerArgumentExpression,更详细的内容请参阅微软官方文档。

用户头像

喵叔

关注

还未添加个人签名 2020.01.14 加入

还未添加个人简介

评论

发布
暂无评论
.NET6新东西--CallerArgumentExpression