string.Format
是一种风险很大的方法。有很多事情可能出错,没有任何编译错误:
string.Format("{0{", text);
string.Format("{1}", text);
string.Format("(0)", text);
string.Format("{0}", text1, text2);
我正在寻找一种在编译时找到这个问题的方法。如果我没记错的话,Resharper会发现其中的一些错误,但它对我的血液来说太丰富了。
答案 0 :(得分:2)
Resharper为您做到这一点 - 即使在编辑时: - 。)。
但要注意像
这样的事情String.Format("{0} blabla", foo, bar);
不要生成错误(毕竟,决定隐藏一个值是完全正常的。)
答案 1 :(得分:1)
经过一些研究,我发现 FxCop已经包含了一个规则,用于字符串格式检查(Usage Rules\Provide correct arguments to formatting methods
)。它甚至可以识别@Sklivvz答案中的例子。不幸的是:
Console.Write
,Console.WriteLine
,string.Format
& StringBuilder.AppendFormat
。 我设法调整它(使用Reflector)也覆盖Common.Logging.ILog.DebugFormat
,但我很确定它与MS EULA相矛盾(“你可能不会反向工程,反编译,或者拆卸...“)。因此,您可以安全地使用FxCop测试.NET2.0应用程序中的字符串格式。
对于所有使用更多最新版本的人,我编写了一个StyleCop规则,用于检查常见格式错误模式的字符串文字。它远非完美,并产生许多误报,但仍然包括分配。
我想查看新的FxCop SDK以获得更全面的解决方案。
我会在这里发表我的结论。
答案 2 :(得分:0)
Resharper将帮助您识别它但是它很重,如果您正在使用现有的应用程序,必须小心使用。