。ToString()和.ToLower()提供有关文化差异的警告

问题描述 投票:0回答:3

我将一些布尔值存储为字符串会话变量,如下所示:

HttpContext.Session.SetString("SomeBool", user.SomeBool.ToString().ToLower());

这给我警告,结果可能因用户的文化而异。那怎么可能?根据文化的不同,“ True”或“ False”的ToString()ToLower()的结果可以通过什么方式变化?无论数据库的文化或托管环境如何,布尔值不是始终由英文单词“ True”和“ False”表示吗?

我也尝试过这三个,它们都给出完全相同的警告:

HttpContext.Session.SetString("SomeBool", FormattableString.Invariant($"{user.SomeBool.ToString().ToLower()}"));

HttpContext.Session.SetString("SomeBool", String.Format(CultureInfo.CurrentCulture, $"{0}", user.SomeBool.ToString().ToLower()));

HttpContext.Session.SetString("SomeBool", String.Format(CultureInfo.CurrentCulture, user.SomeBool.ToString().ToLower()));

VS建议我可以禁用CA1305警告,但我不想这样做。

有什么建议吗?

c# tostring culture tolower
3个回答
2
投票

不要将内容存储为字符串。可以说字符串是处理的第二坏类型。唯一糟糕的是原始二进制文件。

在极少数情况下,您必须将某些内容存储为String,必须确保在所有端点上选择相同的区域性设置和编码。默认情况下,ToString()和Parse()以及通常与字符串相关的函数从Windows提取当前的Culture及其设置。这对于普通的GUI非常有用,但对于这种情况却非常不利。这些问题就是警告所针对的。硬编码一个。

XML和JSON确实会为您处理这些事情。但是在这种情况下,您必须手动执行。


1
投票

ToString()和ToLower()都可以发出此类警告。使用这个:

HttpContext.Session.SetString("SomeBool", user.SomeBool.ToString(CultureInfo.CurrentCulture).ToLower(CultureInfo.CurrentCulture));

0
投票

尝试一下


 // calling getValue() method 
stringSomeBool = getValue(user.SomeBool); 

HttpContext.Session.SetString("SomeBool", stringSomeBool.ToLower()); 

    // defining getValue() method 
    public static void getValue(bool variable) 
    { 

        // getting the value of string property 
        string value = variable.ToString(); 

        // print the string property 
        Console.WriteLine("{0}", value); 
    } 
© www.soinside.com 2019 - 2024. All rights reserved.