C# 为什么要使用 CultureInfo.InvariantCulture 来完成如此简单的任务

C# Why use CultureInfo.InvariantCulture for such a simple task

好的,我正在研究 Saplo Api C# 项目。当我看到这些代码时,我很困惑:

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 的构造函数... public RequestBase()!你会看到 Helper.GetNextId() 这只是 return 一个 int 为什么要使用 CultureInfo.InvariantCulture 我不明白为什么一个简单的 ToString inst 足以完成这项工作或者什么,这不是更多的开销?

当谈到整数时,目前没有公认的官方文化会影响Int32.ToString()的行为方式。它总是会创建一个相同的字符串。

但是,这并不意味着自定义文化可能不会以不同方式解释结果。 Resharper 和其他代码样式工具通常建议使用文化来保持一致性。

值得注意的是,在整数之外旅行时,文化绝对会产生影响。例如,在 EN-US 中,逗号用于千位分隔,句点用于表示小数点。另一方面,在 EN-GB 中则相反。保持值类型之间的一致性当然可以被视为一个好习惯。

就是说,在这种情况下,是的,可能不需要为整数提供 CultureInfo "overhead",除非您希望保持代码库的一致性。

在这种情况下,似乎没有必要。我知道像 ReSharper 和 StyleCop 这样的插件会抱怨(显示警告)一个空的 ToString() 除非你告诉他们不要这样做。编写此代码时可能使用了这些插件之一。

一般在转换日期和decimal/currency值时使用CultureInfo.InvariantCulture