nameof运算符在C# 6.0中引入,用于编译时获取符号名称字符串,如nameof(Console)得"Console"、nameof(Person.Name)得"Name",常用于异常参数验证、INotifyPropertyChanged和日志记录,避免硬编码字符串,支持重构且无性能开销。
nameof 表达式是 C# 6.0 引入的一个编译时运算符,用于获取变量、字段、属性、方法、类等程序元素的名称作为字符串。它能有效避免在代码中使用硬编码字符串,提高代码的可维护性和重构安全性。
nameof 返回指定符号的未限定名称(即不包含命名空间或类型前缀):
string name = nameof(Console); // 结果: "Console"
string method = nameof(Console.WriteLine)
; // 结果: "WriteLine"
string property = nameof(Person.Name); // 结果: "Name"
string parameter = nameof(value); // 在方法内使用参数名
nameof 不会触发运行时求值,它在编译期间就被替换为对应的字符串字面量,因此没有性能开销。
在以下情况中,使用 nameof 可防止因重命名导致的错误:
public void SetName(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name));
}
public string FirstName
{
get => _firstName;
set
{
_firstName = value;
OnPropertyChanged(nameof(FirstName));
}
}
void ProcessOrder(Order order)
{
_logger.LogDebug("Entering {Method}", nameof(ProcessOrder));
// ...
}
优点:
注意点:
基本上就这些。nameof 是提升 C# 代码质量的小而有力的工具,尤其适合替代那些容易出错的“魔法字符串”。