- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个问题我想了很久,但似乎找不到明确的答案。每当我使用 ToString()
方法将整数转换为字符串并运行代码分析时,我都会收到以下警告:
CA1305: Microsoft.Globalization : Because the behavior of 'int.ToString()' could vary based on the current user's locale settings, replace this call in 'Class.Method()' with a call to 'int.ToString(IFormatProvider)'. If the result of 'int.ToString( IFormatProvider)' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'.
这是非常著名的通用 CA1305 警告,只要您调用具有接受 IFormatProvider
参数的重载的方法,就会显示该警告。虽然这在几乎所有情况下都是一个非常正确的警告,但我想不出在调用默认 ToString()
without any format or formatprovider 时会出现什么问题一个整数。所以,如果有人知道任何可能出错的地方,请赐教。我猜 IFormatProvider
重载一定有充分的理由。
顺便说一下,我做总是使用IFormatProvider
重载进行调用,因为它似乎也有性能优势。如果有人对此有任何有见地的评论,请随时分享。
最佳答案
有些事情我想象很容易影响结果:
使用 NegativeSign
属性来说明它如何影响事物的简短但完整的示例:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
int x = -10;
Console.WriteLine(x.ToString());
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
// Make a writable clone
culture = (CultureInfo) culture.Clone();
culture.NumberFormat.NegativeSign = "!!!";
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(x.ToString());
}
}
输出:
-10
!!!10
关于c# - 在没有格式和 IFormatProvider 的情况下使用 Int32.ToString()。为什么我会收到 CA1305 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536080/
我是一名优秀的程序员,十分优秀!