Как я могу определить, недопустима ли составная строка формата?

На документацию, String.Format бросит a FormatException если любой (A) строка формата недопустима или (B) строка формата содержит индекс, который не может быть найден в массиве args.

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

Есть ли что-нибудь, что может сделать это для меня?Спасибо!

5
задан Tinister 16 April 2010 в 18:59
поделиться

3 ответа

Продолжайте ответ gbogumil, в первом случае вы получите:

"Input string was not in a correct format."

, а во втором вы get:

"Index (zero based) must be greater than or equal to 
zero and less than the size of the argument list."

Если вам нужно определить, что именно (для пользовательских сообщений или ведения журнала), то вы можете использовать try catch, например, предложенный qor72, и проверить, с чего начинается сообщение об ошибке. Вдобавок, если вам нужно зафиксировать, какой была строка формата и какие аргументы были, вам нужно будет сделать что-то вроде этого:

        string myStr = "{0}{1}{2}";
        string[] strArgs = new string[]{"this", "that"};
        string result = null;

        try { result = string.Format(myStr, strArgs); }

        catch (FormatException fex)
        {
            if (fex.Message.StartsWith("Input"))
                Console.WriteLine
                  ("Trouble with format string: \"" + myStr + "\"");
            else
                Console.WriteLine
                  ("Trouble with format args: " + string.Join(";", strArgs));
            string regex = @"\{\d+\}";
            Regex reg = new Regex(regex, RegexOptions.Multiline);
            MatchCollection matches = reg.Matches(myStr);
            Console.WriteLine
                ("Your format has {0} tokens and {1} arguments", 
                 matches.Count, strArgs.Length );

        }

РЕДАКТИРОВАТЬ: Добавлено простое регулярное выражение для подсчета токенов формата. Может помочь ...

Надеюсь, это поможет. Удачи!

2
ответ дан 15 December 2019 в 06:21
поделиться

В каждом из этих случаев свойству сообщения FormatException задано отдельное сообщение.

1
ответ дан 15 December 2019 в 06:21
поделиться

А вы не хотите ...?

works = true;
try {
  String.Parse(Format, ObjectArray);
} catch FormatException {
works = false; }
0
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

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