【发布时间】:2018-03-17 09:54:47
【问题描述】:
我在 C# 6.0 中有 2 个代码:
示例 1:
string bar;
// ... some code setting bar.
var foo =
"Some text, " +
$"some other {bar}, " +
"end text.";
示例 2:
string bar;
// ... some code setting bar.
var foo =
$"Some text, " +
$"some other {bar}, " +
$"end text.";
显然,无论审美差异如何,两种代码都会产生相同的结果。
问题:
两者之间有性能差异吗?换句话说,这两种情况是否编译为相同的?
编辑:
一些重要的 cmets 已发布,我认为重播对澄清此问题中的主题很有用。
第二个太可怕了。不要在未插值的字符串上使用字符串插值符号 ($)。其他任何查看代码的人(或未来更有经验的你)都会感到困惑
感谢您的提示,非常感谢,尽管我不得不争辩说您所说的是审美论证。即使这段代码像你说的那样丑陋,即使不应该使用,我仍然认为讨论它可能产生的可能的性能差异是有用的。
@communityMember1:它不会影响代码在运行时的性能。
@communityMember2:那不是真的。插值字符串是调用的语法糖 string.Format,必须被调用(从而影响 性能)。
也许为了避免进一步讨论,我们应该根据一些文档甚至经验证明(如汇编的结果)来加强答案和 cmet。
【问题讨论】:
-
第二个太可怕了。不要在未插值的字符串上使用字符串插值符号 (
$)。其他任何查看代码的人(或未来更有经验的你)都会感到困惑 -
使用 $ 是语法糖。它不会影响代码在运行时的性能。
-
@Zereges 看编译后的 IL here
-
@JonnyPiazzi
"This is totally your opinion, I have a team here with 10 senior C# developers, all agreed that the second one is more legible."-- 在那种情况下我很担心 -
@BACON 我和你在一起。这个问题始于关于性能的问题,但 OP 很快就提出了哪个看起来更好。为什么还要回应人们的意见?当这不是问题的重点时,为什么还要不同意呢?最后,这个问题变成了一场关于谁喜欢什么的小便竞赛(我想 maccettura 是错的,因为 10 个高级开发人员不同意?这与性能有什么关系?) .原来的问题很好。当前的问题是关于意见。所以我投票结束。
标签: c# c#-6.0 string-interpolation syntactic-sugar