C# 11 更加实用的 nameof

C# 11 更加实用的 nameof

Intro

从 C# 6.0 开始,我们可以开始使用 nameof 来引用参数名称,在可能使用 nameof 的地方,一般都推荐使用以便于重构时的自动更新,在之前的 C# 版本中,如果想要在方法参数中或者方法 attribute 中通过 nameof 来引用方法会编译报错,从 C# 11 开始,扩展了 nameof 的作用域,我们就可以使用了,下面看几个示例

Samples

Method parameter reference

在 .NET 6 中引入了一个新的调用者信息 Attribute CallerArgumentExpression , 使用它我们可以简化很多日志或者 metrics 记录等场景,自动获取调用的信息,但是美中不足的是,我们需要使用字符串来引用方法参数,如下所示:

public static ICollection<T> NotEmpty<T>([NotNull] ICollection<T> collection, [CallerArgumentExpression("collection")] string? paramName = null)
{if (collection.Count == 0){throw new ArgumentException("The collection could not be empty", paramName);}return collection;
}

如这样的例子,我们引用 collection 参数只能使用字符串,这对于我们对 collection 参数名进行重构的时候,就会仍然需要手动修改 CallerArgumentExpression 中的参数名,在新版本中,我们将可以直接使用 nameof(collection) 来代替字符串,如下:

public static ICollection<T> NotEmpty<T>([NotNull] ICollection<T> collection, [CallerArgumentExpression(nameof(collection))] string? paramName = null)
{NotNull(collection, paramName);if (collection.Count == 0){throw new ArgumentException("The collection could not be empty", paramName);}return collection;
}

这样就不容易出现一时手误参数名称输入错误,而且 nameof 能够提供更好的重构体验

Attribute reference

除了方法参数中引用方法参数,我们还可以使用方法的 Attribute 中引用方法参数,示例如下:

[Description(nameof(nameExpression))]
public bool M(string name, [CallerArgumentExpression(nameof(name))]string nameExpression = null) 
{return string.IsNullOrEmpty(name);
}

得益于 C# 中的常量插值字符串特性,我们也是可以在 Attribute 中使用常量插值字符串的,如下:

[Description($"{nameof(nameExpression)} IsNullOrEmpty")]
public bool M(string name, [CallerArgumentExpression(nameof(name))]string nameExpression = null) 
{return string.IsNullOrEmpty(name);
}

271d2cea26ed835411f2aef73aa2e057.png

More

目前该特性的支持已经完成并合并入主分支,预计下个版本的 SDK 发布我们就可以使用了~~

References

  • https://github.com/dotnet/csharplang/blob/main/proposals/extended-nameof-scope.md

  • https://sharplab.io/#v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKHQAYACdbAOgGEB7MABxpgFMYAXAWRoWYBsBuAsTKUASgFd2UMM2p16UXswBOAZRUA3KAGNmAZ0H4hAZjKYSVEgG8CJOyQDaAEX3blUemyhMAFABIAIisYCBkaADMfEJkAUQAPemV9PW8YAEoAXxIAST0AOXFeXgB5ZRiGNgBPALSAXVt7dFNgGhpeEg4fclJo5jhHKggilQBBZQBzcRl2eMTk1KjQ5gjFmTS67pJe2aS9FKYSAF4twt40kga7G3x7W7IAdhEiClyCotLyz0rV5jTDW4yBAyQA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【玩转SQLite系列】目录收藏

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u010785585/article/details/53326323 转载请注明出处&#xff1a;http://blog.csdn.net/linglongxin24/article/details/53326323 本文出自【DylanAndroid的博客】 【玩转S…

二、首页影院/我的 栏制作《仿淘票票系统前后端完全制作(除支付外)》

页面效果&#xff0c;影院内容&#xff1a; 我的页分为登录、注册、我的&#xff0c;如果登录了那么就显示我的页面否则显示登录页。 登录页&#xff1a; 我的页&#xff1a; 一、标题头部制作 接着我们点击影院&#xff0c;发现当前页内容为空&#xff1a; 我们的影院页…

C语言试题三十四之求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

【数据库系统经典案例】销售系统数据库分析及完整实现过程

文章目录 一、产品表以及产品添加更新二、顾客管理三、销售记帐四、统计问题一、产品表以及产品添加更新 GOODLUCK的产品表:PRODUCTS(PNO,PNAME,PR,QTY) 从该表可以知: PNO->PNAME、PR、QTY 所以这个表只能按产品编号增加行,也就是说:有新产品了,可以在这个表中…

------shell学习

dd #!/bin/bash echo Hello World!array(a b 3 "ch") for i in array;doecho ${array[i]} doneecho ${array[*]} echo ${#array[]} #--------------------------------------- vers$(uname -r) #括号表示括号里面的内容先执行 等同于反引号 echo ${vers} read -p &qu…

PPT如何让多对象排列整齐

在某幻灯片上插入了多个对象&#xff0c;如果希望快速让它们排列整齐&#xff0c;按住Ctrl键&#xff0c;依次单击需要排列的对象&#xff0c;再选择“绘图-对齐或分布”&#xff0c;最后在排列方式列表中任选一种合适的排列方式就可实现多个对象间隔均匀的整齐排列。 本文转自…

聊聊 C# 方法重载的底层玩法

最近在看 C 的方法重载&#xff0c;我就在想 C# 中的重载底层是怎么玩的&#xff0c;很多朋友应该知道 C 是不支持重载的&#xff0c;比如下面的代码就会报错。#include <stdio.h>int say() {return 1; } int say(int i) {return i; }int main() {say(10);return 0; }从错…

Nginx图片剪裁模块探究 http_image_filter_module

#yum install -y gd-devel Install add http_image_filter_module Module #./configure --prefix/usr/local/nginx_image_filter/ --with-http_image_filter_module #make && make install use: off:关闭模块处理 test:确保图片是jpeg gif png否则返415错误 size:输出有…

Android WebView 图片超出宽度自适应,点击查看大图

webView 配置 WebSettings webSettings webView.getSettings(); webSettings.setJavaScriptCanOpenWindowsAutomatically(true);webSettings.setDomStorageEnabled(true);webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕 ☆…

C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

三、我的/登录 栏制作《仿淘票票系统前后端完全制作(除支付外)》

我的页分为登录、注册、我的&#xff0c;如果登录了那么就显示我的页面否则显示登录页。 登录页&#xff1a; 我的页&#xff1a; 一、登录页制作 1.1 登录头制作 首先我们创建一个行&#xff0c;命名为登录块&#xff0c;设置高度为包裹&#xff1a; 之后将会在这个行中…

ASP.NET站点配置以及VS2008下C#、JavaScript联合调试(Ajax) ----以最短路径Dijstra最短路问题为例

实验任务描述: 用VS2008构造ASP.NET站点开发环境;用ASP.NET完成JavaScript开发调试;用Ext3.0.0完成一个简单的树显示站;WebService程序设计,Dijstra最短路Web 服务;JavaScript通过Ajax技术调用WebService;一、Windows下WEB共享设置 打开你的WINDOWS,鼠标点开“我的电脑”…

【NOIP2010】【P1317】乌龟棋

似乎很像搜索的DP&#xff08;应该也可以用搜索写&#xff09; 原题&#xff1a; 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘是一行N 个格子&#xff0c;每个格子上一个分数&#xff08;非负整数&#xff09;。棋盘第1格是唯一的起点&#xff0c…

mysql添加普通用户用于管理单一数据库

2019独角兽企业重金招聘Python工程师标准>>> 使用phpmyadmin进行操作 创建用户&#xff0c;输入密码 关键选择&#xff1a;勾选 Create database with same name and grant all privileges 其他权限一律不要勾选 转载于:https://my.oschina.net/u/2485194/blog/5491…

C# 11 新特性:接口中的静态抽象成员

之前假设我们有一个非常复杂的数学运算方法&#xff1a;public static int Calc(int x, int y) > x y;但是&#xff0c;上述方法只能支持int类型。如果需要传入其它数字类型&#xff0c;需要再次定义&#xff1a;public static double Calc(double x, double y) > x y;…

tomcat两个项目冲突

java.lang.IllegalStateException: Web app root system property already set to different value 最近在搭建项目环境的时候出现了下面的错误 java.lang.IllegalStateException: Web app root system property already set to different value: webapp.root [D:/tomcat-5.0.…

四、一般页面制作《仿淘票票系统前后端完全制作(除支付外)》

一、播放影片影院页制作 上一节已经做完了首页所有栏目内容&#xff0c;那么点击购票后应该出现对应有购票的影院&#xff0c;选择影院后进入购买票务页。 首先新建一个页面命名为播放该影片的影院&#xff1a; 接着复制首页中的标题栏到播放影片的影院页中&#xff0c;此时…

SuppressLint黄色警告的原因以及解决办法

最近在做项目的时候&#xff0c;碰到方法的前面和类的前面有时会出现SuppressLint或者SuppressWarnings这样的黄色警告&#xff0c;看起来很不舒服&#xff0c;于是上网搜集了一些相关资料。发现这些警告的出现其实是由于我们编写代码时的一些不规范的写法导致&#xff0c;解决…

重磅!win10无法安装.NET Framework 3.5服务解决办法(附离线安装包下载)

安装CASS测图软件之前需要安装CAD,Win10操作系统安装CAD时经常会需要.net framework 3.5,win10中默认是没有安装该环境的,需要单独安装。本文讲解Win10系统中在线和离线安装.net framework 3.5。 CAD 2006+CASS 7.1安装参考:《Win 10操作系统CAD 2006+CASS 7.1安装图文经典…

C语言试题三十六之将s所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…