2009-06-12 2 views
4

Я получаю предупреждение CA1305.CA1305: int.Parse (String)

Microsoft.Globalization: Поскольку поведение 'int.Parse (строка)' может варьироваться в зависимости от настроек локали текущего пользователя , заменить этот вызов в «_Default.CalculateImageButton_Click (объект, ImageClickEventArgs) 'с вызовом ' int.Parse (строка, IFormatProvider) '. Если результат 'int.Parse (строка, IFormatProvider)' будет отображаться пользователю , укажите 'CultureInfo.CurrentCulture' как параметр 'IFormatProvider'. В противном случае, если результат будет , сохраненный и доступный по программному обеспечению, такой как , как если он сохраняется на диске, или базы данных, укажите 'CultureInfo.InvariantCulture'.

Что именно может пойти не так, если я опускаю указание культуры при разборе Int32?

ответ

9

Это означает, что, когда вы читаете «1,234» из файла данных или записи базы данных, попробуйте передать его в Int через Parse, вы получите 1234 в Америке и 1 в Германии. Предупреждение дает хороший совет - если вы взаимодействуете с пользователем, укажите CurrentCulture (спасибо Andrew!), И если вы взаимодействуете с файловой системой или базой данных (или чем угодно!), Используйте InvariantCulture

+1

Я считаю, что CurrentUICulture ТОЛЬКО для вытягивания ресурсов строки. Для всех форматирования вы должны использовать CurrentCulture (обратите внимание на отсутствие пользовательского интерфейса). В противном случае определенные культуры вызовут ваш код. См. Http://code.google.com/p/dotnetopenid/issues/detail?id=60 пример ошибки, вызванной этим. –

1

Если вы разбор целого числа, он может содержать тысячи разделителей, которые могут быть «,» или «.». в зависимости от региона.

Смежные вопросы