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

在 .NET 中,nameof 表达式用于获取变量、属性、方法或类型的名称作为字符串。它在编译时解析,因此不会带来运行时性能开销,同时能有效避免“魔法字符串”——即硬编码的字符串字面量,容易拼错且难以维护。
nameof 可以作用于各种程序元素,返回其标识符的名称:
例如,在抛出 ArgumentNullException 时:
void ProcessPerson(Person person) { if (person == null) throw new ArgumentNullException(nameof(person)); }这样如果将来参数名更改,编译器会报错提醒你同步更新,避免遗漏。
魔法字符串常出现在属性变更通知、异常消息、配置键名等地方。使用 nameof 能提升代码健壮性。
1. INotifyPropertyChanged 实现
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(obj.Name) 返回的是 "obj")。
// 下面这行返回的是 "user",不是 "Name" nameof(user.Name) // 结果是 "user"对于深层属性,可结合常量或封装处理,或使用 Expression
基本上就这些。nameof 是一个轻量又实用的功能,配合重构工具能大幅减少因重命名导致的运行时错误。合理使用,让字符串引用更安全。
以上就是.NET中的nameof表达式是什么?如何避免在代码中使用魔法字符串?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号