MyEnum.Item.ToString() 和 nameof(MyEnum.Item) 有什么区别?

What is the difference between MyEnum.Item.ToString() and nameof(MyEnum.Item)?

MyEnum.Item.ToString();
nameof(MyEnum.Item);

喜欢哪种风格?两者之间有什么实际区别吗?

如果你不混淆你的代码,几乎是一样的......然而,当你混淆你的代码时,ToString() 可能会产生垃圾,而 nameof() 会检索你的名字要求/预期。

有关 MSDN

的更多信息

.ToString() 在运行时计算,可以用 your own format.

调用

nameof() 在编译时进行评估,并将注入一个永远不会改变的字符串文字。

第一个是 运行 时间调用,它将在 运行 时间实现它需要 return 字符串 "Item",然后执行此操作。

第二种是将"Item"直接写入代码的另一种方法。

第二个会稍微快一些,但在 C#6 之前是不可用的。因此,手动将 "Item" 放入代码中将是一种有错误风险的优化,而 nameof() 会在编译时捕获此类错误。

因此,虽然直接使用名称的方法可能曾经被认为是冒险,但这种风险已经消失,而且它有一点优势。

ToString() 虽然仍然是根据 MyEnum 类型的变量或表达式输出字符串的唯一方法。