.ToString()和.ToLower()发出有关文化差异的警告

时间:2019-12-07 21:46:41

标签: c# asp.net-core tostring culture tolower

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

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警告,但是我不想这样做。

有什么建议吗?

更新

尽管VillageTech的回答回答了我的问题,但我更改了代码以完全避免该问题。受到克里斯托弗关于硬编码值的建议的启发:

HttpContext.Session.SetString("SomeBool", user.SomeBool ? "true" : "false");

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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); 
    } 

答案 3 :(得分:0)

我的第一个贡献: 像这样使用变量之前,请尝试将其定义为字符串:

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

这是我通常会做的, 希望这对我的第一个回答有所帮助:))

答案 4 :(得分:0)

让FormattableString.Invariant为您完成ToString():

using static System.FormattableString; 

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