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

meh*_*dvd 6 .net c# intellisense visual-studio

考虑使用formatstring.Format's frist参数这样的参数进行写入的方法.如您所知,Intellisense知道第一个参数的约束并检查其与参数的一致性.我该怎么写这样的方法.

举个简单的例子,考虑一下string.Format如下:

public string MyStringFomratter(string formatStr, params object[] arguments)
{
    // Do some checking and apply some logic
    return string.Format(formatStr, arguments);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能到编译器或IDE,它说的formatStr是一样的东西string.Format的第一个参数?

所以,如果我有这样的代码:

var x = MyStringFormatter("FristName: {0}, LastName: {1}", firstName);
// This code should generate a warning in the IDE
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 10

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

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

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