如何自动将C#插值字符串重构为string.Format(...)?

时间:2015-07-27 08:56:46

标签: c# string

最近在C#6中引入了一个名为字符串插值的新语言元素/句法糖。

然而,在享受了这种语法的甜蜜味道几分钟后,很快就会发现,由于嵌入了变量,插值字符串(从语义角度来看仍然是字符串文字)无法重构为资源只存在定义插值字符串的范围。

例如,此范围锁定的字符串文字无法进行本地化,无论本地化需求如何,一些代码质量检查器都会将字符串文字视为代码气味。

使用庞大的企业代码库我希望出现越来越多的内插字符串,因此问题将很快从理论变为实际。我想要两个

  • 有一个代码质量检查规则,只是禁止这种做法 就像代码中间的字符串文字一样(我可以管理它 在标准质量工具中定义自定义规则。虽然StyleCop目前甚至不识别它们,但运行内部错误,所以这并不像听起来那么容易
  • 有一个可以重构的重构工具 字符串插值到string.Format然后它可以很容易地 重构为标准的.NET资源。

任何建议

2 个答案:

答案 0 :(得分:2)

启用代码分析可防止使用插值字符串(警告CA1305),因为它们不支持指定区域设置(与String.Format不同)。因此,虽然有点尴尬,但这可能是您特定案例的可能解决方案。

此外,R#可以快速将一种格式转换为另一种格式 - 因此,虽然Code Analysis和R#的自动组合不会让您快速查找并部分纠正所有情况。

答案 1 :(得分:1)

使用字符串插值可以进行本地化。

考虑一下:

System.FormattableString s = $"Hello, {name}";

s.ToString()将使用当前文化来生成字符串。

float flt = 3.141;

System.IFormattable s = $"{flt}";

使用IFormattable,您可以根据特定语言更改数字格式

所以 可能,而不是直接。

源:

https://msdn.microsoft.com/nl-nl/library/dn961160.aspx