При создании исключений я часто передаю отформатированную строку, которая раскрывает подробности о возникшей проблеме. Я всегда указываю поставщика форматирования, если это возможно (что является хорошей практикой, так как в противном случае вы можете забыть решить, какая культура является подходящей, и по умолчанию используется текущая культура, которая может привести к множеству ошибок).
Вот пример:
throw new InvalidOperationException(
string.Format(
CultureInfo.CurrentCulture,
"{0} is a bad number.",
number));
Я испытываю желание использовать CurrentCulture
, как показано выше, потому что сообщения об исключениях предназначены для людей (естественно, код никогда не должен воздействовать на само сообщение об исключении). Сообщение будет отформатировано в соответствии с культурой клиента, поэтому всякий раз, когда мне нужно показать его клиенту, оно выглядит красиво.
Однако, помимо отображения сообщений пользователям, исключения также могут регистрироваться в файле журнала. Я видел много сообщений, сидящих в моих файлах журналов, со всеми видами культур, использованными для их форматирования. Довольно уродливые! В этом случае InvariantCulture
будет более подходящим или, возможно, культура сервера, на котором размещен файл журнала.
Суть в том, что при форматировании исключения вы просто никогда не узнаете свою аудиторию, поэтому кажется невозможным решить, какую культуру использовать при форматировании. Было бы замечательно иметь возможность отложить форматирование до точки, в которой перехватывается исключение, но это выходит за рамки способа реализации исключений в .NET.
Так что вы думаете по этому поводу?