0

0

.NET中的nameof表达式是什么?如何避免在代码中使用魔法字符串?

月夜之吻

月夜之吻

发布时间:2025-11-28 16:58:02

|

804人浏览过

|

来源于php中文网

原创

nameof 表达式用于获取标识符名称字符串,编译时解析,避免魔法字符串。例如 nameof(Person.Name) 返回 "Name",常用于参数验证、属性通知和配置键名,提升代码安全性与可维护性。

.net中的nameof表达式是什么?如何避免在代码中使用魔法字符串?

在 .NET 中,nameof 表达式用于获取变量、属性、方法或类型的名称作为字符串。它在编译时解析,因此不会带来运行时性能开销,同时能有效避免“魔法字符串”——即硬编码的字符串字面量,容易拼错且难以维护。

nameof 的基本用法

nameof 可以作用于各种程序元素,返回其标识符的名称:

  • string propertyName = nameof(Person.Name); // 返回 "Name"
  • string methodName = nameof(Person.ToString); // 返回 "ToString"
  • string parameterName = nameof(id); // 常用于参数验证

例如,在抛出 ArgumentNullException 时:

void ProcessPerson(Person person) { if (person == null) throw new ArgumentNullException(nameof(person)); }

这样如果将来参数名更改,编译器会报错提醒你同步更新,避免遗漏。

避免魔法字符串的常见场景

魔法字符串常出现在属性变更通知、异常消息、配置键名等地方。使用 nameof 能提升代码健壮性。

1. INotifyPropertyChanged 实现

京点点
京点点

京东AIGC内容生成平台

下载
public string Name { get => _name; set { _name = value; OnPropertyChanged(nameof(Name)); // 而不是 "Name" } }

2. 配置或映射键名

var timeout = config[nameof(DatabaseSettings.Timeout)]; // 比硬编码 "Timeout" 更安全

3. 异常和日志消息

if (string.IsNullOrEmpty(userName)) throw new ArgumentException("用户名不能为空", nameof(userName));

nameof 的限制与注意事项

nameof 只能用于编译时存在的标识符,不能用于表达式路径或多层成员链(如 nameof(obj.Name) 返回的是 "obj")。

// 下面这行返回的是 "user",不是 "Name" nameof(user.Name) // 结果是 "user"

对于深层属性,可结合常量或封装处理,或使用 Expression> 辅助,但会增加复杂度。简单场景优先使用 nameof 直接成员。

基本上就这些。nameof 是一个轻量又实用的功能,配合重构工具能大幅减少因重命名导致的运行时错误。合理使用,让字符串引用更安全。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

436

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

746

2023.08.22

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

279

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

253

2025.06.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 3万人学习

Rust 教程
Rust 教程

共28课时 | 4.5万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号