2012-02-15 5 views
0

Я должен использовать .ToString(CultureInfo.CurrentCulture) в каждом номере для преобразования строк, например. Могу ли я как-то переопределить .ToString(), чтобы я не получал больше сообщений, таких как культура в преобразовании строк явно?.ToString() и .ToString (CultureInfo.CurrentCulture)

К примеру, сейчас я должен изменить каждый

myNumValue.Count.ToString(); 

в

myNumValue.Count.ToString(CultureInfo.CurrentCulture); 

ответ

4

Пункт этого правила состоит в том, чтобы сделать явным выбор культуры для каждой операции форматирования и разбора. Если вы попытаетесь систематически поменять местами реализации, чтобы «обмануть» правило, вы просто окажетесь под потенциальными проблемами под ковриком. Как предложено Lonli-Lokli, вы можете захотеть использовать методы расширения, если вам не нравится читать вызовы ToString с аргументами культуры, но у вас должен быть отдельный метод расширения для каждой поддерживаемой вами культуры. например: ToUIString() -> ToString (CultureInfo.CurrentCulture) и ToInvariantString() -> ToString (CultureInfo.InvariantCulture)

+2

У меня были довольно интересные проблемы с людьми, которые не указали культуры на ToString или string.Format вызывает при записи пользовательских форматов файлов на диск. Когда новый коллега присоединился из Индии и Японии, возникли всевозможные проблемы. Разумеется, не указывая на культуру, двум пользователям приходится записывать разные форматированные данные, которые, конечно же, не могут быть прочитаны другими пользователями. Со временем я научился никогда не подавлять это правило или искать работу. Я видел слишком много проблем, вызванных тем, что не делал этого. – jessehouwing

+2

Это еще хуже, если вы входите в производство с кодом, который форматирует или анализирует данные «общего использования», используя культуры клиентских потоков. Во многих случаях вы не можете вывести предполагаемую культуру из сохраненных данных (например: 3/5/2001 3 мая или 5 марта?), Поэтому вы не можете правильно очистить существующие данные, как только вы найти ошибку в производственной локализации. Тем не менее, я не обязательно применяю «сырую» ToString (культуру), поскольку иногда предпочитаю использовать механизм, который позволит мне поменять источники культуры. В таких случаях я обычно добавлял бы правило FxCop для предотвращения использования ToString. –

3

Если вы имеете в виду сообщение от анализа кода, то вы можете отключить конкретное правило.

1

Вы можете создать метод расширения ToStringEx и вызвать обычный метод с указанной культурой.

8

Это не имеет смысла заменять ToString()ToString(CultureInfo.CurrentCulture), потому что это именно то, что уже делает ToString().

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

+0

inst default invantCurrentCulture, а не CurrentCulture – senzacionale

+4

По умолчанию это CurrentCulture, поэтому он создает проблемы, когда люди опускают его. – Kugel

0

Вы можете написать ToStringInvariant и А методы расширения ToStringCurrent с одним переопределения для каждого типа для преобразования: Int, двойной, десятичный и т. д. Это вопрос минут с копированием и вставкой. DateTime может в конечном итоге обрабатываться одинаково.