При использовании Строки. Формат является там простым способом добавить круглую скобку вокруг строкового значения, если это не является пустым или пустым

Я пытаюсь изолировать (в целях локализации) форматирование некоторых сообщений. В одном из случаев у меня есть несколько параметров, некоторые из которых могут быть пустой строкой. Пример, вероятно, требуется здесь....

Если параметрами является Параметр один и Параметр два затем, я хочу, чтобы результатом было Некоторое сообщение Параметр один (Параметр два).

Если параметрами является Параметр один и строка. Пустой затем я хочу, чтобы результатом было Некоторое сообщение Параметр один

Если бы Параметр два был числовым значением, то я мог использовать что-то как:

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

Это работает, как я ожидал бы - конкретно, если второй параметр является пустым, вывод является просто Тестовым Параметром один.

К сожалению, я еще не нашел подобную опцию, которая работает со строковыми параметрами. Есть ли один?

Разъяснение: Я полностью осведомлен о многочисленных способах получить результат, в котором я нуждаюсь в коде. Я конкретно хочу знать, существует ли подобный встроенный механизм для строк к числовой, показанной выше.

7
задан Richard J Foster 1 July 2010 в 13:20
поделиться

6 ответов

Вы всегда можете попытаться написать свой собственный модуль форматирования строк, реализовав IFormatProvider и ICustomFormatter

Затем вызовите его как

var stringValue = string.Format(new NewCustomStringFormatInfo(),
     "Test {0}{1:' ('#')'}", "Parameter one", 12)
4
ответ дан 7 December 2019 в 03:11
поделиться

Вы можете написать свою собственную оболочку String.Format (непроверено):

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
ответ дан 7 December 2019 в 03:11
поделиться

Вы можете создать метод расширения, который поможет справиться с этим и сделать его немного более кратко.

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

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

Этот метод будет обрабатывать нулевую / пустую проверку и скобки. Это довольно специализированный метод, поэтому он вряд ли пригодится где-либо еще. Но тогда ваш код будет примерно таким:

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

Однако ymmv. Это повлияет на вашу строку формата, поскольку за скобки больше не будет его ответственности. Я не могу придумать много супер элегантных способов обработки варианта использования, о котором вы говорите подробно.

2
ответ дан 7 December 2019 в 03:11
поделиться
var s = System.String.IsNullOrEmpty(param2) ? string.Format(...) : string.Format(...)
0
ответ дан 7 December 2019 в 03:11
поделиться

Если вы не определите функцию, которая заключает значение в скобки, я не вижу, как вы делаете это inline?

Простой пример:

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

public string EncloseInParenthsisIfNotEmpty(string input)
{
    if (string.IsNullOrEmpty(input)) return "";
    return string.Format("({0})", input);
}
1
ответ дан 7 December 2019 в 03:11
поделиться

Зависит от вашей ситуации, но вы могли бы сделать

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

Никаких гарантий, так как это не защищает от дурака и делает большое предположение, что ваша результирующая строка будет содержать "()" только если paramTwo пуст.

2
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: