.NET6新东西--CallerArgumentExpression
2023-03-14 22:38:50 时间
在.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,更详细的内容请参阅微软官方文档。
相关文章
- 2021年Linux内核分析:新功能令人振奋 但改动幅度比往年低
- 如何用三只兔子的故事来轻松理解 Kubernetes 污点和容忍
- Garuda Linux!你应该知道
- Linux 内核 2021:Linus Torvalds 最多产,commit 数降至 73.7k
- 用 Samba 跨平台共享文件
- 再见 CentOS Linux,是时候迁移到替代操作系统 了
- 在浏览器里面运行命令行,真香!
- 操作系统就用一张大表管理内存?
- 2021 年优秀的六款 Linux 发行版
- Windows 11 Sun Valley 2更新有望2022年夏季到来
- 2022 年值得期待的七款 Linux 发行版
- 嵌入式 Linux 系统的组件
- 你的Windows 10不顺畅?试试这三项优化,让系统流畅起来
- 用这五招,在Windows 11中为任何文件、文件夹和网页创建桌面快捷方式
- 一日一技:MacOS如何找回已经连接的Wi-Fi密码?
- 2022年开年出大Bug 程序员被害惨:微软修复Exchange服务器故障
- 2021 年我最喜欢的五个 Linux 应用程序
- 硬盘偷偷私藏了好货?隐藏和保护文件的利器
- 为什么在 Linux 中“文件夹”被称为“目录”?
- 一条nginx命令引发的对于容器的思考