nameof运算符在C# 6.0中引入,用于编译时获取符号名称字符串,如nameof(Console)得”Console”、nameof(Person.Name)得”Name”,常用于异常参数验证、INotifyPropertyChanged和日志记录,避免硬编码字符串,支持重构且无性能开销。

nameof 表达式是 C# 6.0 引入的一个编译时运算符,用于获取变量、字段、属性、方法、类等程序元素的名称作为字符串。它能有效避免在代码中使用硬编码字符串,提高代码的可维护性和重构安全性。
nameof 的基本用法
nameof 返回指定符号的未限定名称(即不包含命名空间或类型前缀):
string name = nameof(Console); // 结果: “Console”
string method = nameof(Console.WriteLine); // 结果: “WriteLine”
string property = nameof(Person.Name); // 结果: “Name”
string parameter = nameof(value); // 在方法内使用参数名
nameof 不会触发运行时求值,它在编译期间就被替换为对应的字符串字面量,因此没有性能开销。
避免硬编码字符串的常见场景
在以下情况中,使用 nameof 可防止因重命名导致的错误:
异常参数验证:
当抛出 ArgumentException 或其派生类时,通常需要传入参数名。
public void SetName(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name));
}
INotifyPropertyChanged 实现:
在数据绑定中,通知属性更改时需传入属性名。
public string FirstName
{
get => _firstName;
set
{
_firstName = value;
OnPropertyChanged(nameof(FirstName));
}
}
配置或日志记录中的标识符:
记录方法进入/退出、配置项名称等。
void ProcessOrder(Order order)
{
_logger.LogDebug(“Entering {Method}”, nameof(ProcessOrder));
// …
}
nameof 的优势与限制
优点:
支持 IDE 重构:重命名变量或属性时,nameof 引用会同步更新。编译时检查:如果引用的符号不存在,编译失败,避免运行时错误。零运行时成本:生成的是常量字符串。
注意点:
只能用于已存在的语言符号,不能用于任意表达式。返回的是简单名称,如需完整路径需结合其他方式(如反射)。不能用于字符串拼接或动态构造名称,必须是直接符号引用。
基本上就这些。nameof 是提升 C# 代码质量的小而有力的工具,尤其适合替代那些容易出错的“魔法字符串”。
以上就是C#的nameof表达式是什么?如何避免在代码中使用硬编码的字符串?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441627.html
微信扫一扫
支付宝扫一扫