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

时间:2016-02-20 12:21:39

标签: c# c#-6.0

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

首选哪种款式?这两者之间有什么实际区别吗?

3 个答案:

答案 0 :(得分:12)

第一个是运行时调用,它将在运行时实现它需要返回字符串"Item",并且这样做。

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

第二个会稍微快些,但在C#6之前就不可用了。因此,手动将"Item"放入代码中会导致出现错误的优化,而nameof()会在编译时捕获到这样的错误。

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

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

答案 1 :(得分:3)

.ToString()在运行时进行评估,可以使用your own format进行调用。

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

答案 2 :(得分:2)

如果您没有混淆代码,几乎相同......但是,当您对代码进行模糊处理时,if let nowPlayingInfoDict = MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo { let elapsedTimeString = nowPlayingInfoDict["MPNowPlayingInfoPropertyElapsedPlaybackTime"] } 可能会产生垃圾,而ToString()会检索您的名称要求/预期。

有关MSDN

的更多信息