繁体   English   中英

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

[英]c# How to validate parameters in VS2017 IDE similar to string.Format

我注意到在VS2017 IDE中,如下行

string.Format("{0}: {1}, {2}, {3}, {4}", 1, 2, 3, 4);

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

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

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);
  }
}

在IDE中显示的Main()函数

仅包含string.Format的行显示验证错误。 这意味着,当调用需要相同验证的自定义函数时,我仅将问题检测为运行时错误。

我查看了string.Format的参考源 ,希望能够复制配置IDE验证的属性,但在那里看不到任何相关内容,并且无法找出合适的搜索条件来查找是否已在其他地方提出此要求。 (例如, 谷歌搜索确切的错误消息似乎只找到生成错误的Roslyn源)

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

[占位符答案,直到其他人对类似问题的后来访问者给出的答案可能比这个答案更好!]

总结一下,我从评论中给出的答案可以理解:

在Visual Studio 2017中,这不可能以任何明显的方式实现。

它需要编写自己的Roslyn-Analyzer(由Flat Eric建议)或Visual Studio Extension(由Chetan Ranpariya建议),并且无法简单地指示编译器使用已为字符串编写的现有分析器。格式。

相反,我们希望对具有相似参数集的每个函数重做Microsoft对string.Format所做的相同工作,或者在IDE中没有相同级别的帮助的情况下重做。 (我不清楚到底需要重复多少工作,这不是我打算寻求的解决方案)。

JuanR还建议在调用站点重构代码以使用字符串插值(我在阅读该注释时刚刚学到的东西,可能值得尝试)。

我希望在此功能的设计中遵循DRY原则,以便我可以指示编译器使用相同的规则将众所周知的代码分析器应用于函数的'format'和'args'参数作为string.Format的等效参数,但这似乎尚未在系统中进行设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM