使用es-CA
创建文化信息,显然不正确 应该抛出异常,但不再有。
此之前投掷CultureNotFoundException
:new CultureInfo("es-CA")
。它现在似乎回退到es
“未知区域设置”。虽然像xy-ZZ
这样的东西也有用,但这有点奇怪吗?
为什么这不再抛出异常?这是在最近的.NET版本中改变了吗?
更新1
文档提到以下内容:
如果操作系统不支持该文化,并且如果name不是补充或替换文化的名称,则该方法将抛出CultureNotFoundException异常。
在Windows 7上测试它,它会抛出CultureNotFoundException
,但在Windows 10上它不会抛出异常。
答案 0 :(得分:2)
现在根据评论添加答案。
由于Windows设计的变化,现在没有更多的"无效的文化"如果名称与BCP-47匹配,那么.NET Framework / .NET Core不会抛出异常,而是接受新的文化。
您可以参考the GitHub discussion和以下引用
由于框架取决于获取文化的操作系统,操作系统 正在向模型转移任何BCP-47文化名称甚至变得有效 操作系统不支持它。例如,Windows 10支持任何 格式良好的文化名称即使操作系统也没有真正的数据 文化。例如,如果想要创建一种文化" xx-XXXX"在 Windows 10它会成功。考虑到这一点,它没有意义 有文化列举,因为我们返回的任何集合并不代表这些 唯一支持的文化。看着你的问题,你的解决方法是 可以接受的。如果真的想拥有更好的方式,我们可以考虑 像CultureInfo.TryGetCulture()之类的东西,但正如我之前所说 向前迈进几乎任何文化都是有效的。