开发者

When using String.Format is there a simple way to add parenthesis around a string value if it is not null or empty

I am attempting to isolate (for localization purposes) the formatting of some messages. In one of the cases, I have several parameters, some of which may be an empty string. An example is probably called for here....

If the parameters are Parameter one and Parameter two then I want the result to 开发者_如何转开发be Some message Parameter one (Parameter two).

If the parameters are Parameter one and string.Empty then I want the result to be Some message Parameter one

If Parameter two was a numeric value, then I could use something like:

String.Format("Test {0}{1:' ('#')'}", "Parameter one", 12);

This operates as I'd expect - specifically if the second parameter is null the output is just Test Parameter one.

Unfortunately I haven't (yet) found a similar option which works with string parameters. Is there one?

Clarification: I am fully aware of numerous ways to get the result I need in code. I specifically want to know if there is a similar built-in mechanism for strings to the numeric one shown above.


You could always attempt writing your own custom string formatter by implementing IFormatProvider and ICustomFormatter

Then invoke it as

var stringValue = string.Format(new NewCustomStringFormatInfo(),
     "Test {0}{1:' ('#')'}", "Parameter one", 12)


Depends on your situation, but you could do

string.Format(yourFormatString, paramOne, paramTwo).Replace("()", "");

No guarantees, as it is not fool-proof and makes the large assumption that your resulting string would only have "()" if paramTwo was empty.


You could create an extension method to help handle this and make it a little more concise.

public static string SomeWellNamedExtension(this string s)
{
    if(string.IsNullOrEmpty(s))
        return "";

    return string.Format("({0})", s);
}

This method will handle the null/empty check and the parens. It's a pretty specialized method, so it's not likely to be useful almost anywhere else. But then your code would be like:

string.Format("Test {0}{1}, paramOne, paramTwo.SomeWellNamedExtension());

However, ymmv. This will affect your format string in that the parens are no longer its responsibility. I can't think of many super elegant ways of handling the use case you are talking detailing.


Unless you define a function that encloses a value in brackets, I can't see how you do it inline?

A simple example:

string.Format("Some message {0} {1}", "Parameter one", EncloseInParenthsisIfNotEmpty(""))

public string EncloseInParenthsisIfNotEmpty(string input)
{
    if (string.IsNullOrEmpty(input)) return "";
    return string.Format("({0})", input);
}


var s = System.String.IsNullOrEmpty(param2) ? string.Format(...) : string.Format(...)


You could write your own wrapper of String.Format (untested):

string MyFormat(string format, params object[] args)
{
  object[] newArgs = new object[args.Length];
  for(int i=0; i<args.Length; i++)
  {
    if(args[i] is string)
    {
      newArgs[i] = String.IsNullOrEmpty(args[i] as string) ? "" : string.Format("({0})", args[i]);
    }
    //numeric cases etc
    else
    { 
      newArgs[i]=args[i];
    }
  }
  return string.Format(format, newArgs);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜