2014-01-12 41 views
6

喜欢的String.Format方法考虑的方法有像string.Format的弗里斯特参数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 
+6

你不能让Visual Studio为你分析参数内容。但是你可以使用Visual Studio插件(如ReSharper的),它会验证参数计数的String.Format –

+0

@SergeyBerezovskiy你们ReSharper的检查,只是针对的String.Format,但对于我自己的方法?有没有办法? – mehrandvd

+0

Resharper检查了对于每种方法,您都不认为Reshaper的硬编码制造商会针对一种方法名称或另一种方法进行检查 – MikeSW

回答

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

这是我正在寻找的确切答案。谢谢。 – mehrandvd

0

编译器不使用的参数数目错误发出警告的String.Format。 但是,如果您需要智能感知支持,请在方法前加上///,它将创建一个用于记录方法的模板。填写文件并在使用该方法时出现在智能感知中。

+0

事实上,我正在寻找一种方法来告诉Resharper我的方法参数的行为。 – mehrandvd

+0

我认为像String.Format这样的方法在Resharper中是硬编码的。抱歉。 –