版本6.0增加了nameof的新特性,但我不能理解它的用途,因为它只接受变量名并在编译时将其更改为字符串.

我想它在使用<T>时可能会有一些用途,但当我try 使用nameof(T)时,它只会打印T,而不是使用的类型.

你知道目的吗?

推荐答案

如果希望重用属性名称,例如在基于属性名称引发异常或处理PropertyChanged个事件时,情况会如何.在很多情况下,你都想知道房产的名称.

举个例子:

switch (e.PropertyName)
{
    case nameof(SomeProperty):
    { break; }

    // opposed to
    case "SomeOtherProperty":
    { break; }
}

在第一种情况下,如果不同时更改属性定义和nameof(SomeProperty)表达式,重命名SomeProperty将导致编译错误.在第二种情况下,重命名SomeOtherProperty或更改"SomeOtherProperty"字符串将导致运行时行为silent中断,在生成时不会出现错误或警告.

这是一种非常有用的方法,可以保持代码编译和无bug(类似).

(A very nice article from Eric Lippert为什么infoof没有成功,而nameof成功)

.net相关问答推荐

如何处理以用户为中心的CSP现时值?(uc-lock.bundle.js)

.NET发布的应用程序运行与开发不同的端口

在 Rx 中,处理线程安全是否是消费者(IObserver)的责任?

更改列表中的值

将 Span 传递到函数时出现 F# 错误

"投掷;" 是什么意思?靠自己做什么?

如何将 Javascript 日期时间转换为 C# 日期时间?

整个命名空间的SuppressMessage

如何使用 C# 中的代码更改网络设置(IP 地址、DNS、WINS、主机名)

来自奥尔森时区的 .NET TimeZoneInfo

我应该默认推荐密封类吗?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

多个等待与 Task.WaitAll - 等效?

C# 中基于接口编程的运算符重载

将月份 int 转换为月份名称

自创建数据库以来,支持ApplicationDbContext上下文的模型已更改

内存分配:堆栈与堆?

合并两个(或更多)PDF

Dictionary.Add 与 Dictionary[key]=value 的区别

如何将两个 List 相互比较?