c#如何在VS2017 IDE中验证类似于string.Format的参数

时间:2019-03-11 14:02:37

标签: c# validation visual-studio-2017 ide

我注意到在VS2017 IDE中,类似以下内容的行

coroutineScope {
    launch { ... }
}

用绿色波浪形下划线突出显示string.Format("{0}: {1}, {2}, {3}, {4}", 1, 2, 3, 4); 。将鼠标悬停在其上时,将显示警告“格式字符串包含无效的占位符”,表明VS2017的IDE能够验证用于调用诸如string.Format之类的函数的参数。

这很棒,因为在编写格式字符串和参数之间不匹配的代码时,我会立即得到有关该问题的反馈,而不是在运行时过一会儿。但是,如果我用类似于string.Format的原型定义自己的函数,并且内部使用string.Format,则不会进行参数验证。

{4}

Main() function as it appears in IDE

只有带有class Example { void ThrowException(string format, params object[] args) { throw new Exception(string.Format(format, args)); } void LogMessage(int errorCode, string format, params object[] args) { throw new NotImplementedException("No logger!", new Exception(string.Format(format, args))); } void Main() { string.Format("{0}: {1}, {2}, {3}, {4}", 1, 2, 3, 4); ThrowException("{0}: {1}, {2}, {3}, {4}", 1, 2, 3, 4); LogMessage(0, "{0}: {1}, {2}, {3}, {4}", 1, 2, 3, 4); } } 的行显示验证错误。这意味着,当调用需要相同验证的自定义函数时,我只会将该问题检测为运行时错误。

我查看了the reference source for string.Format,希望能够复制用于配置IDE验证的属性,但是在那里看不到任何相关内容,并且无法找出合适的搜索词来查找是否已被询问在其他地方(例如google search for the exact error message似乎只能找到产生错误的Roslyn源)

什么控制IDE是否对格式字符串执行这种验证,以及如何为自己的代码(例如示例函数)启用它?

0 个答案:

没有答案