C11更加实用的nameof
C# 11 更加实用的nameofIntro
从 C# 6.0 开始,我们可以开始使用 nameof 来引用参数名称,在可能使用 nameof 的地方,一般都推荐使用以便于重构时的自动更新,在之前的 C# 版本中,如果想要在方法参数中或者方法 attribute 中通过 nameof 来引用方法会编译报错,从 C# 11 开始,扩展了 nameof 的作用域,我们就可以使用了,下面看几个示例SamplesMethod parameter reference
在 .NET 6 中引入了一个新的调用者信息 Attribute CallerArgumentExpression , 使用它我们可以简化很多日志或者 metrics 记录等场景,自动获取调用的信息,但是美中不足的是,我们需要使用字符串来引用方法参数,如下所示:public static ICollection NotEmpty([NotNull] ICollection 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 NotEmpty([NotNull] ICollection 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(#34;{nameof(nameExpression)} IsNullOrEmpty")] public bool M(string name, [CallerArgumentExpression(nameof(name))]string nameExpression = null) { return string.IsNullOrEmpty(name); }
More
目前该特性的支持已经完成并合并入主分支,预计下个版本的 SDK 发布我们就可以使用了~~ Referenceshttps://github.com/dotnet/csharplang/blob/main/proposals/extended-nameof-scope.md https://sharplab.io/#v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKHQAYACdbAOgGEB7MABxpgFMYAXAWRoWYBsBuAsTKUASgFd2UMM2p16UXswBOAZRUA3KAGNmAZ0H4hAZjKYSVEgG8CJOyQDaAEX3blUemyhMAFABIAIisYCBkaADMfEJkAUQAPemV9PW8YAEoAXxIAST0AOXFeXgB5ZRiGNgBPALSAXVt7dFNgGhpeEg4fclJo5jhHKggilQBBZQBzcRl2eMTk1KjQ5gjFmTS67pJe2aS9FKYSAF4twt40kga7G3x7W7IAdhEiClyCotLyz0rV5jTDW4yBAyQA
文章来源于amazingdotnet ,作者WeihanLi
鑫宇,你生前到底经历了什么啊?孩子,阿姨想问你,得是多么大的坎儿你迈不过去才会选择这样极端的方式结束自己的生命啊?你才仅仅15岁,虽然长得高高大大,可其实还是个孩子,是不是你的肩膀实在承受不了了啊?在选择这样的
一次遇见,一生爱恋,宁愿孤独,也不相忘头条创作挑战赛我承认,我无法把你遗忘,可是又只能在心里深藏,爱一个人,等一场相逢,哪怕是只能在心里想念,我也无怨无悔。一次遇见,一生爱恋,宁愿孤独,也不相忘,我希望还能有一天,我们
人在沧海,爱在桑田(二)坏人!坏人!!对于我们这个年龄段的孩子来说,记忆力有的时候会差的可怜,我们也许会忘记某天背过的单词,也许会忘记某道习题的解答,也许会忘记昨天如狼似虎解决掉的那一顿零食一共花了
觉得这辈子都写不出来的句子(3)1。遮遮浅浅叶疏斜,柳柳碎碎几道劫。对着风细语,风给不了答案。2。我站在悬崖边上看向前方,抬头是璀璨的星空,低头是人间烟火。眼前是我最爱的人,路人与亲朋好友的话与神态将我赶到此处,
总有人,鼓起勇气做雨中的起舞者2022城事我曾经尝得,失望无论大小,是一种苦味。鲁迅坟如果一个人没有能力帮助他所爱的人,最好不要随便谈什么爱与不爱。当然,帮助不等于爱情,但爱情不能不包括帮助。鲁迅我们终会死亡所
平凡的世界里的10句话,读完你就不累了路遥用了整整6年的时间,终于完成了鸿篇巨著平凡的世界。而路遥也在四年后因病去世。直到现在,这部小说仍然影响着一批人,他们在孙少平和孙少安身上,看到了自己的影子,也从字里行间,找到了
总有一天,你会成为世界的过客总有一天,你会成为世界的过客,所以,勇敢去热爱,去生活,将沉闷的日子,活成值得铭记的时刻。给每一个烦恼一段期限,在有限的时间内尽力解决,剩下的时间,请还给快乐的自己。心小了,所有的
人到晚年,别太高估身边人,真正靠得住的,其实只有这两样一些老人深受儿女好,自己就好思想的影响,委屈自己,娇惯儿女,想要以此换来儿女的孝顺。然而,结果往往适得其反,父母累死累活,却讨不到儿女的半点好处。人到晚年,儿女孝顺,是父母的福气然
cba第三期最佳月度球员,胡金秋当选最佳球员,亚当斯最佳外援cba联赛在1月28日公布了第三期月度最佳球员,胡金秋当选最佳球员,亚当斯当选最佳外援,新疆外援中锋2。28米的法尔当选最佳防守球员,同曦小将赵柏清当选最佳星锐球员。胡金秋伤愈归来
壕车出击!切尔西3000万欧签19岁小将古斯托7年,冬窗已揽7名强援支出超2亿欧北京时间1月29日切尔西官方宣布,19岁的后卫马洛古斯托从里昂转会加盟,签约至2030年。切尔西官方写道马洛古斯托从里昂转会加盟切尔西,签约至2030年。19岁的法国右后卫将在本赛
体验闽都民俗外国友人嗨了咚咚锵,咚咚锵2日,梁厝特色历史文化街区锣鼓喧天热闹非凡,各式各样的非遗项目歌舞表演轮番上阵,叫卖声此起彼伏。此情此景让11名在榕过年的外国友人特别兴奋新奇。当天,他们应市外办邀请