mehrandvd
mehrandvd

Reputation: 9116

How to write a method like string.Format with intellisense support

Consider a method to write with a format parameter like string.Format's frist parameter. As you know the Intellisense is aware of first parameter's constraints and checks for its consistency with parameters. How can I write such method.

As a simple example, consider a wrap of string.Format like:

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

How can I say to the compiler or IDE that formatStr is something like string.Format's first parameter?

So if I have some code like this:

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

Upvotes: 8

Views: 3023

Answers (2)

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236248

You cannot make Visual Studio analyze parameter content for you - it simply verifies that code is compilable, and String.Format is compilable even if you haven't specified parameters for all placeholders. But you can use Visual Studio add-in (e.g. ReSharper or CodeRush) which analyzes placeholders count for String.Format formatting string and verifies parameters count passed to this method.

BTW I'm not using ReSharper but looks like it has support for marking any method as string formatting method - Defining Custom String Formatting Methods. You just should annotate your method with StringFormatMethodAttribute attribute:

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

Upvotes: 11

Uri Y
Uri Y

Reputation: 850

The compiler doesn't issue a warning for String.Format with wrong number of parameters. However, if you want intellisense support, precede your method with /// and it will create a template for documenting the method. Fill in the documentation and it will appear in the intellisense when you use the method.

Upvotes: 0

Related Questions