【问题标题】:Can I default all my strings to C# 6.0 interpolated string concatenation?我可以将所有字符串默认为 C# 6.0 插值字符串连接吗?
【发布时间】:2019-07-27 18:25:34
【问题描述】:

我发现自己在我的代码中经常使用 C# 6.0 插值字符串连接样式$"Hello {name} {lastName}!"

我了解,在引入此功能时,它需要单独的语法才能不破坏任何先前包含 {} 符号的字符串。但是,在创建新项目时,我不介意在极少数情况下必须编写 {{}},因为我需要字符串中的实际符号。当然,要求添加额外的$ 并不多,但是当我发现自己对大部分字符串都这样做时,我宁愿尽可能将其省略。

我希望 "Hello {name} {lastName}!" 的结果是 "Hello John Doe" just as $"Hello {name} {lastName}!" 今天做的。

如何使编译器默认所有字符串都被视为插值字符串?

【问题讨论】:

  • 我假设不会,就像moo(true) 不会做与if(true) 一样的事情。
  • 并立即让您的代码在您将来发布包含字符串的示例时无法识别,例如堆栈溢出并寻求帮助?或者对于任何其他开发人员......
  • moo(true) 赢得胜利
  • 我能想到的唯一其他选择是某种扩展,当您打开带有" 的字符串时,它可以作为宏自动为$ 添加前缀。我不知道有这样的事情,但我想有可能创造出来。
  • @John 我会喜欢这样的宏!您能否指出如何在 Visual Studio 中创建这样的宏?

标签: c# .net string concatenation c#-6.0


【解决方案1】:

你不能。目前没有这样的编译器设置。

【讨论】:

  • 我正在投票,因为我需要在当天使用更多积分,这对我来说是一个足够好的答案
  • 我也喜欢这个答案:简短、简单。
  • 我在四处搜索后也很怀疑,但没有找到任何此类问题,我认为值得一提。我想我会建议这个功能,希望它会被包含在一些牵强的幻想未来中。谢谢!
  • @jsmars - 不太可能。拥有可以在项目之间复制和粘贴的代码,而编译器 静默 以不同方式解释它们可能是大量细微错误的来源。通常,C# 团队的目标是“成功的坑”。
  • @Damien_The_Unbeliever 我猜这很合理,我只是希望它在实现时成为默认值,并让编译器为旧项目包含 {} 的任何字符串预热。当然这没什么大不了的,但它确实使代码变得不必要地臃肿。
【解决方案2】:

您可以向code-cracker 提出分析器修复程序。

你也可以用正则表达式搜索 if:(?<!\$)"[^"\{]*\{

【讨论】:

  • 这看起来是一个非常有趣的项目,我将不得不抽出一些时间来了解它是如何构建其中一个的。看起来他们还有许多其他的好东西。感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多