我正在运行ReSharper的测试版,它对以下代码发出警告:

int id;
// ...
DoSomethingWith(id.ToString());

警告出现在id.ToString()调用中,它告诉我"在字符串转换中显式指定区域性".我理解这个警告,我知道如何修复它——只需将代码更改为更难处理的id.ToString(CultureInfo.InvariantCulture)即可.

但我的问题是:这有必要吗?我的意思是,当你使用DateTime(不同的区域性有不同的日期格式)和Double(小数点使用不同的字符)这样的类型时,指定区域性显然很重要.但是Int32.ToString(),至少在en-US和不变文化中,根本没有添加任何格式.没有逗号,没有小数点,没有美元符号,什么都没有.那么,不同的文化会有什么不同呢?

当你调用无参数Int32.ToString()时,是否有一些区域性实际上是某种格式?或者这是ReSharper测试版中的一个错误,而这个警告真的不适用于Int32(在这种情况下,我将提交一份ReSharper错误报告)?

推荐答案

操作系统允许更改数字的negative sign.

Control panel -> 
   Language and regional settings -> 
         Additional settings -> 
             Negative sign

因此,当前的文化可能已经压倒了负面迹象.在这种情况下,您需要尊重区域设置,这就是警告的原因.您还可以通过编程更改负号:

    CultureInfo culture = Thread.CurrentThread.CurrentCulture;
    // Make a writable clone
    culture = (CultureInfo) culture.Clone();
    culture.NumberFormat.NegativeSign = "!";

.net相关问答推荐

使用PowerShell在Windows容器内安装exe

如何使用.NET8MapIdentityApi设置OpenApi操作ID

.NET MAUI ListView - ObservableCollection - 在异步方法期间不更新

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

为什么 GetShortestDayName 返回的名称比预期的短?

.Include() 与 .Load() 在 EntityFramework 中的性能

我可以从我的应用程序中抛出哪些内置 .NET 异常?

SubscribeOn 和 ObserveOn 有什么区别

如何在 WPF 中创建/制作圆角按钮?

.NET - 实现捕获所有异常处理程序的最佳方法是什么

如何在 C# 7 中返回多个值?

SQLParameter 如何防止 SQL 注入?

react 式扩展使用的好例子

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

Visual Studio 2017 和 2019 突出显示滚动条中所选单词的出现

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

在 .NET 中,null 的哈希码是否应该始终为零

说明 C# 中 volatile 关键字的用法

C# 应用程序中的全局键盘捕获

如何为 Dapper 查询动态创建参数