如何自动将c#内插字符串重构为string.Format(..)

本文关键字:string Format 重构 字符串 何自动 | 更新日期: 2023-09-27 18:04:55

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

然而,在享受了几分钟这种语法的甜头之后,很快就发现,插入的字符串(从语义的角度来看仍然是字符串字面量)不能重构到资源中,因为嵌入的变量只存在于定义了插入字符串的作用域中。

例如,

这个范围锁定的字符串字面值不能本地化,并且不管本地化需要如何,一些代码质量检查器过去常常将嵌入的字符串字面值视为代码气味。

使用一个巨大的企业代码库,我希望出现越来越多的内插字符串,所以这个问题将很快从理论转向实践。我想要两个

  • 有一个代码质量检查规则,禁止这种做法像在代码中间的字符串字面值(),我可以通过在标准质量工具中定义自定义规则。虽然StyleCop目前甚至不能识别它们,并运行到一个内部错误,所以这将不会像听起来那么容易)
  • 有一个可以重构的重构工具字符串插值到字符串。格式,那么它可以很容易地可以重构为一个标准的。net资源。
任何建议

如何自动将c#内插字符串重构为string.Format(..)

启用代码分析可以防止使用插入字符串(警告CA1305),因为它们不支持指定区域设置(不像String.Format)。因此,虽然有些尴尬,但这是解决您特殊情况的可能方法。

r#还可以快速地将一种格式转换为另一种格式,因此,虽然代码分析和r#的组合不是自动的,但它可以让您快速找到并部分纠正所有的情况。

可以使用字符串插值实现本地化。

考虑一下:

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

s.ToString()将使用当前区域性生成字符串。

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

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

所以可能的,只是不直接。

源:

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