如何使用intellisense支持编写类似string.Format的方法

时间:2014-01-12 11:37:21

标签: c# .net visual-studio intellisense

考虑使用format参数编写的方法,例如string.Format的frist参数。如您所知,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

2 个答案:

答案 0 :(得分:10)

您不能让Visual Studio分析参数内容 - 它只是验证代码是否可编译,即使您没有为所有占位符指定参数,String.Format也是可编译的。但您可以使用Visual Studio加载项(例如ReSharperCodeRush)分析占位符对String.Format格式化字符串的计数,并验证传递给此方法的参数计数。

BTW我没有使用ReSharper,但看起来它支持将任何方法标记为字符串格式化方法 - Defining Custom String Formatting Methods。您应该使用StringFormatMethodAttribute属性注释您的方法:

[StringFormatMethod("formatStr")]
public string MyStringFomratter(string formatStr, params object[] arguments)
{
    // Do some checking and apply some logic
    return string.Format(formatStr, arguments);
}

答案 1 :(得分:0)

编译器不会针对参数数量错误的String.Format发出警告。 但是,如果您需要智能感知支持,请在方法前加///,它将创建用于记录方法的模板。填写文档,当您使用该方法时,它将显示在intellisense中。