2015-10-05 6 views
1

Хорошо, я иду через проект Saplo Api C#. Это пень меня, когда я увидел этот код:C# Зачем использовать CultureInfo.InvariantCulture для такой простой задачи

public class Helper 
{ 
    private static int _currentId; 
    public static int GetCurrentId() 
    { 
     return _currentId; 
    } 
    public static int GetNextId() 
    { 
     return ++_currentId; 
    } 
} 

[DataContract] 
internal class RequestBase<T> 
{ 
    public RequestBase() 
    { 
     ID = Helper.GetNextId().ToString(CultureInfo.InvariantCulture); 
    } 

    public RequestBase(string method, T @params) 
     : this() 
    { 
     Method = method; 
     Parameters = @params; 
    } 

    [DataMember(Name = "id")] 
    public string ID { get; private set; } 

    [DataMember(Name = "method")] 
    public string Method { get; set; } 

    [DataMember(Name = "params")] 
    public T Parameters { get; set; } 
} 

Так что, если вы посмотрите на конструкторе RequestBase .... общественность RequestBase (!) вы увидите Helper.GetNextId(), это только возвращает int, зачем беспокоиться об использовании CultureInfo.InvariantCulture, я не понимаю, почему простой ToString inst достаточно хорош для выполнения задания или что-то еще, разве это не просто лишние накладные расходы?

ответ

2

Что касается целых чисел, то в настоящее время нет признанной официальной культуры, которая повлияет на то, как ведет себя Int32.ToString(). Он всегда будет создавать идентичную строку.

Однако это не означает, что пользовательская культура может не интерпретировать результаты по-разному. Инструменты рестартера и других инструментов стиля обычно рекомендуют использовать культуру для обеспечения согласованности.

Стоит отметить, что при путешествии за пределы целых культур культуры абсолютно имеют значение. Например, в EN-US запятые используются для разделения тысяч, а периоды используются для представления десятичной точки. С другой стороны, в EN-GB все наоборот. Сохранение соответствия между типами ценностей, безусловно, можно рассматривать как хорошую привычку.

В этом случае, да, предоставление CultureInfo для целых чисел, вероятно, необязательно «накладных расходов», если вы предпочитаете сохранять согласованность в своей кодовой базе.

0

В этом случае это не представляется необходимым. Я знаю, что плагины вроде ReSharper и StyleCop будут жаловаться (показывать предупреждение) о пустой ToString(), если вы не сообщите им об этом. Возможно, один из этих плагинов использовался при написании этого кода.

Обычно CultureInfo.InvariantCulture используется при преобразовании дат и десятичных/валютных значений.

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