如何使用intellisense支持编写类似string.Format的方法
考虑使用string.Format
的frist参数之类的format
参数进行写入的方法。 如您所知,Intellisense知道第一个参数的约束并检查其与参数的一致性。 我怎么能写这样的方法。
举个简单的例子,考虑一下string.Format
的包装:
public string MyStringFomratter(string formatStr, params object[] arguments) { // Do some checking and apply some logic return string.Format(formatStr, arguments); }
我怎么能对编译器或IDE说formatStr
就像string.Format
的第一个参数?
所以如果我有这样的代码:
var x = MyStringFormatter("FristName: {0}, LastName: {1}", firstName); // This code should generate a warning in the IDE
您不能让Visual Studio分析参数内容 – 它只是validation代码是否可编译,即使您没有为所有占位符指定参数,也可以编译String.Format
。 但是您可以使用Visual Studio加载项(例如ReSharper或CodeRush )来分析String.Format
格式化字符串的占位符计数并validation传递给此方法的参数计数。
顺便说一下,我没有使用ReSharper,但看起来它支持将任何方法标记为字符串格式化方法 – 定义自定义字符串格式化方法 。 您应该使用StringFormatMethodAttribute
属性注释您的方法:
[StringFormatMethod("formatStr")] public string MyStringFomratter(string formatStr, params object[] arguments) { // Do some checking and apply some logic return string.Format(formatStr, arguments); }
编译器不会为String.Format
发出错误数量的参数警告。 但是,如果您需要智能感知支持,请在方法前面加上///
,它将创建一个用于记录方法的模板。 填写文档,当您使用该方法时,它将出现在intellisense中。