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
类型的变量或表达式输出字符串的唯一方法。
MyEnum.Item.ToString();
nameof(MyEnum.Item);
喜欢哪种风格?两者之间有什么实际区别吗?
如果你不混淆你的代码,几乎是一样的......然而,当你混淆你的代码时,ToString()
可能会产生垃圾,而 nameof()
会检索你的名字要求/预期。
有关 MSDN
的更多信息.ToString()
在运行时计算,可以用 your own format.
nameof()
在编译时进行评估,并将注入一个永远不会改变的字符串文字。
第一个是 运行 时间调用,它将在 运行 时间实现它需要 return 字符串 "Item"
,然后执行此操作。
第二种是将"Item"
直接写入代码的另一种方法。
第二个会稍微快一些,但在 C#6 之前是不可用的。因此,手动将 "Item"
放入代码中将是一种有错误风险的优化,而 nameof()
会在编译时捕获此类错误。
因此,虽然直接使用名称的方法可能曾经被认为是冒险,但这种风险已经消失,而且它有一点优势。
ToString()
虽然仍然是根据 MyEnum
类型的变量或表达式输出字符串的唯一方法。