无效的CultureInfo不再抛出CultureNotFoundException

时间:2016-01-28 23:19:31

标签: c# .net globalization

使用es-CA创建文化信息,显然不正确 应该抛出异常,但不再有。

之前投掷CultureNotFoundExceptionnew CultureInfo("es-CA")。它现在似乎回退到es“未知区域设置”。虽然像xy-ZZ这样的东西也有用,但这有点奇怪吗?

为什么这不再抛出异常?这是在最近的.NET版本中改变了吗?

更新1

文档提到以下内容:

  

如果操作系统不支持该文化,并且如果name不是补充或替换文化的名称,则该方法将抛出CultureNotFoundException异常。

在Windows 7上测试它,它会抛出CultureNotFoundException,但在Windows 10上它不会抛出异常。

1 个答案:

答案 0 :(得分:2)

现在根据评论添加答案。

由于Windows设计的变化,现在没有更多的"无效的文化"如果名称与BCP-47匹配,那么.NET Framework / .NET Core不会抛出异常,而是接受新的文化。

您可以参考the GitHub discussion和以下引用

  

由于框架取决于获取文化的操作系统,操作系统   正在向模型转移任何BCP-47文化名称甚至变得有效   操作系统不支持它。例如,Windows 10支持任何   格式良好的文化名称即使操作系统也没有真正的数据   文化。例如,如果想要创建一种文化" xx-XXXX"在   Windows 10它会成功。考虑到这一点,它没有意义   有文化列举,因为我们返回的任何集合并不代表这些   唯一支持的文化。看着你的问题,你的解决方法是   可以接受的。如果真的想拥有更好的方式,我们可以考虑   像CultureInfo.TryGetCulture()之类的东西,但正如我之前所说   向前迈进几乎任何文化都是有效的。