如何在Console.Write()中警告错误的参数数

本文关键字:错误 警告 参数 数数 Console Write | 更新日期: 2023-09-27 18:18:34

我们有一个包含数千行代码的程序,例如:

Console.Write("{0},{1} - {2}", e1, "My custom error", e2); // Write a custom error

但是,下面的语句将抛出错误,因为"{3}"大于参数的数量:

Console.Write("{0},{1} - {3}", e1, "My custom error", e2); // Write a custom error

我如何扫描我的整个项目在编译时捡起这个?

更新:

遗憾的是,ReSharper不能工作。我已经创建了自己的日志类"w",它调用Console。在后台编写和其他日志记录。ReSharper在"控制台"中拾取错误。写入",但忽略所述日志方法的任何参数。

更新:

FXCop不会发现这种错误。令人惊讶的是,为什么不选择一个明显的错误,这将导致整个程序异常崩溃?

更新:

谢谢你的提示@adudley -我最终替换了所有的"控制台"实例。写"answers"字符串。格式",在日志记录类中,调用带有try/catch的专用版本来处理任何错误。这避免了如果一个很少使用的日志函数调用了错误的参数而导致整个程序崩溃。我宁愿告诉程序确保它是防弹的,而不是手动检查1000个日志函数中难以发现的错误。

如何在Console.Write()中警告错误的参数数

你得问他们为什么是错的?它们在输入时应该是正确的,如果您翻译了它们,请在导入翻译时检查(这就是我们所做的)。

商业ReSharper插件会自动找到这个错误(我认为你需要打开项目范围的检查)。有免费试用版

我猜它可能是一些巨大的,未经测试的(可能是不可测试的!)遗留应用程序,但我要为单元测试(例如NUnit)提供一个词-你可以使用它们与一个好的test-double库(如Rhino.Mocks)来抛出各种错误并练习所有这些行。错误将显示为测试失败,直到修复:)

静态代码分析可以为您做到这一点。如果您至少有Visual Studio的高级版,则可以在项目设置中启用它。否则,您可以使用FxCop在构建后检查程序集。

这两个工具都有一个内置规则,应该可以满足您的需求:为格式化方法提供正确的参数

我想这是一个进行重构的绝佳机会(当然,如果你能花时间去做的话——如果有成千上万个这样的实例,可能需要一些时间;))

与其在数千个地方执行相同的Write操作,为什么不创建一个静态方法来输出错误消息,例如…

public static void ShowError(string e1, string e2)
{
    // possibly check for null / empty parameters if you need to.
    Console.Write("{0},{1} - {2}", e1, "My custom error", e2);
}

并用

替换实例
ShowError(e1, e2);

这给了你在方法中做更多事情的灵活性,而不仅仅是输出到控制台-你可能也想记录错误…然后,您只需要更新一个方法以不同的格式输出/到另一个位置。

此外,如果您尝试使用不正确的参数数量/类型调用方法,则会得到编译错误。