На документацию, String.Format
бросит a FormatException
если любой (A) строка формата недопустима или (B) строка формата содержит индекс, который не может быть найден в массиве args.
Я хочу смочь определить, которые (если любой) тех условий перестали работать на какой-либо произвольной строке и массиве аргументов.
Есть ли что-нибудь, что может сделать это для меня?Спасибо!
Продолжайте ответ 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 );
}
РЕДАКТИРОВАТЬ: Добавлено простое регулярное выражение для подсчета токенов формата. Может помочь ...
Надеюсь, это поможет. Удачи!
В каждом из этих случаев свойству сообщения FormatException задано отдельное сообщение.
А вы не хотите ...?
works = true;
try {
String.Parse(Format, ObjectArray);
} catch FormatException {
works = false; }