.NET6新东西--CallerArgumentExpression

简介: .NET6新东西--CallerArgumentExpression

在.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。上面代码运行输出的结果是:

image.png

同样,新增的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);
}

image.png

如果没有变量名和属性名则会显示value的字面量,如果传进来的是一个表达式,则会显示出变大时本身。这相比前面所说的那三个Attribute来说代码简化了很多。在.NET6中的 ArgumentNullException.ThrowIfNull()方法就是利用CallerArgumentExpression实现的。

本篇文章只是简单的讲解了一下CallerArgumentExpression,更详细的内容请参阅微软官方文档。


目录
相关文章
|
关系型数据库 MySQL Windows
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
28148 2
|
编解码 监控 网络协议
HLS 和 RTSP 的优势
【10月更文挑战第25天】HLS和RTSP各自的优势使其在不同的应用场景中发挥着重要作用。HLS适用于需要广泛兼容性、自适应码率和简单部署的场景,如在线视频点播、直播等;而RTSP则更适合对实时性、精确播放控制和互操作性要求较高的专业级实时流媒体应用。了解它们的优势有助于根据具体的项目需求选择最合适的流媒体传输协议。
734 61
LabVIEW如何以编程方式获取克隆VI名称?
LabVIEW如何以编程方式获取克隆VI名称?
227 0
|
自然语言处理 搜索推荐 API
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
1973 0
|
物联网 数据处理
LLM-05 大模型 15分钟 FineTuning 微调 ChatGLM3-6B(微调实战1) 官方案例 3090 24GB实战 需22GB显存 LoRA微调 P-TuningV2微调
LLM-05 大模型 15分钟 FineTuning 微调 ChatGLM3-6B(微调实战1) 官方案例 3090 24GB实战 需22GB显存 LoRA微调 P-TuningV2微调
838 0
|
测试技术 Python
279: 人数统计(python)
279: 人数统计(python)
206 1
|
存储 Java C#
C# | 使用Memory<T>高效地读写内存数据
Memory<T>是什么? 它是一种可变大小、可读写的内存块,可以安全地暴露给用户代码进行操作。 为什么要使用Memory<T>? 使用它有许多好处。最主要的是善用它可以提高代码的性能。因为Memory<T>是可变的,所以我们可以直接在内存中操作数据,而不需要进行额外的拷贝操作。 使用Memory<T>还可以减少垃圾回收的压力,因为我们不需要创建新的对象来存储数据。 Memory<T>还可以与Span<T>和ReadOnlySpan<T>类型一起使用,这些类型可以方便地对数据进行访问和操作。
574 0
|
XML Java 编译器
【Protobuf】Protobuf快速使用 Java版、Python版
 Protocol Buffers(简称为ProtoBuf)是一种用于序列化、结构化数据的语言无关、平台无关、可扩展的机制。它由Google开发并于2008年开源发布。
1359 0
|
自然语言处理 数据可视化 定位技术
使用ChatGPT+Python进行科研绘图
使用ChatGPT+Python进行科研绘图
1486 0