Есть ли метод string.TryFormat, который работает аналогично string.Format? - PullRequest
6 голосов
/ 22 сентября 2011

Есть ли способ проверить, является ли аргумент string.format допустимым аргументом, например, string.TryFormat.

try
{
    string.Format(Format, new string[Selectors.Count]); //
}
catch (Exception)
{
    return false; 
}

Я использую этот метод в своем пользовательском интерфейсе и он медленный и заметный, когда ловится исключение, поэтому мне было интересно, есть ли лучший способ для использования.

Я всегда мог написать свой собственный метод, но я хотел знать, есть ли заранее определенный.

Недопустимая строка Format будет выглядеть примерно так: string .Format ("Format {0} {1} {2}", новая строка [] {"a", "b"})

1 Ответ

8 голосов
/ 22 сентября 2011

Единственный способ, которым мог бы работать метод System.String.TryFormat, - перехватывать любые исключения, которые могут быть выброшены из различных реализаций IFormattable.ToString (хотя String.TryFormat может заменить некоторые из своих собственных исключений возвращением флага ошибки, делать это, позволяя исключениям из TryFormat escape, было бы не очень полезно).

Хуже того, метод TryFormat не будет иметь никакого способа узнать, могут ли какие-либо исключения, выданные IFormattable.ToString, быть вещами, которые не должны быть перехвачены. Даже если контракт IFormattable.ToString требовал, чтобы реализации не пропускали ничего, кроме FormatException, если спецификатор формата был недопустимым, вероятно, нужно было бы, чтобы метод String.TryFormat возвращал false (а не бросал), если некоторые из входных объектов были недопустимый, но попытка отформатировать их не сделала ничего хуже, хотя утечка исключений, если попытка отформатировать элементы сама по себе привела к коррупции. К сожалению, при настройке иерархии исключений String.TryFormat не сможет даже приблизиться к такой семантике.

Проще говоря, метод String.TryFormat мало что может сделать, кроме использования блока try / catch для подавления исключений, генерируемых внутренними методами. Существует нормальное значение того, что методы TryXX должны работать лучше в случае сбоя, чем обычная процедура, которая только что выполняла XX в блоке try-catch. Если метод TryFormat просто будет работать, подавляя исключения в любом случае, он также может позволить потребителю справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...