gpt4 book ai didi

c# - 在没有格式和 IFormatProvider 的情况下使用 Int32.ToString()。为什么我会收到 CA1305 警告?

转载 作者:太空狗 更新时间:2023-10-29 19:58:55 27 4
gpt4 key购买 nike

这个问题我想了很久,但似乎找不到明确的答案。每当我使用 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 重载进行调用,因为它似乎也有性能优势。如果有人对此有任何有见地的评论,请随时分享。

最佳答案

有些事情我想象很容易影响结果:

  • 是否替换数字(不确定这是否影响 ToString)
  • 是否对数字进行分组(不确定 NumberFormatInfo 是否会曾经仅通过这种 ToString 调用将整数中的数字分组)
  • 负号(这可能很重要)

使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com