c# - .ToString() 和 .ToLower() 给出关于文化差异的警告
问题描述
我将一些布尔值存储为字符串会话变量,如下所示:
HttpContext.Session.SetString("SomeBool", user.SomeBool.ToString().ToLower());
这给了我警告,结果可能会因用户文化而异。这怎么可能?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 的回答回答了我的问题,但我已经更改了代码以完全避免这个问题。受 Christopher 关于硬编码值的建议的启发:
HttpContext.Session.SetString("SomeBool", user.SomeBool ? "true" : "false");
解决方案
不要将内容存储为字符串。可以说,字符串是第二个最差的处理类型。唯一更糟糕的是原始二进制文件。
在极少数情况下,您必须将某些内容存储为字符串,您必须确保在所有端点选择相同的文化设置和编码。默认情况下,ToString() 和 Parse() 以及通常与字符串相关的函数从 Windows 中提取当前文化及其设置。这对于普通的 GUI 非常有用,但对于这种情况非常糟糕。这些问题就是警告的内容。而是硬编码一个。
XML 和 JSON 确实会为您处理这些事情。但在这种情况下,您必须手动完成。
推荐阅读
- c# - WebView2 - NavigateToString 不呈现图像
- plot - 如何在 Julia 中分组绘制多个系列?
- php - 特定国家/地区的 WooCommerce 自定义本地化地址格式
- mysql - Sidekiq 没有看到数据库表的变化
- swift - 如何快速解开可选字典?
- c# - 使用 Excel 自动提取 PDF 数据
- java - 使用流迭代对象数组
- reactjs - 模块解析失败:'import' 和 'export' 可能只出现在 Laravel Mix 的 'sourceType: module' 中
- ios - 同步 AVAuthorizationStatus 组合和 SwiftUI
- javascript - 新手在这里 :WAVES: 只需要一点帮助,对你们来说很简单!:P