我有一个 .NET 6 应用程序。我正在尝试运行此代码:
using System;
using System.Text;
using System.Globalization;
public class Program
{
public static void Main()
{
new RegionInfo("CM");
}
}
我收到此错误:
未处理的异常。 System.ArgumentException:区域名称 CM 不应对应于中立文化;需要特定的文化名称。 (参数“名称”) 在 System.Globalization.RegionInfo..ctor(字符串名称) 在 Program.Main() 命令由信号 6 终止
这里是一把小提琴。
相同的代码在 .NET 4.7.2 中运行良好。另外,我在here检查了
"CM"
是喀麦隆的有效ISO 3166国家/地区代码。
那么,这种行为是 C# 错误吗?我有一个应用程序,用户可以在其中添加国家/地区。现在,当添加喀麦隆时,我的应用程序失败了。我该如何修复或绕过它?
这是一个很大的应用程序,所以我不能只是将其降级到.NET 4.7.2。
错误消息并不是说 CM 不是有效的区域性名称 - 只是说它是中性区域性,而不是特定区域性。
显然您需要指定语言/区域组合,例如“fr-CM”代表法语(喀麦隆),“en-CM”代表英语(喀麦隆)。
老实说,我不知道为什么 .NET Framework 中的行为与 .NET 6 中不同,但上述内容似乎至少允许构造函数调用完成。当然,您需要检查对应用程序其余部分的影响。
我发现我们在项目中使用的另一个选项是建立一个单独的国家/地区项目,其中包含有关每个国家/地区的硬编码信息。之后,任何其他需要此信息的项目都可以有对该国家项目的包引用。
通过这种方式,我们可以通过独立于 .NET 来获得灵活性
RegionInfo
。在我们国家的项目中,"CM"
是有效的区域名称。我们不必附加 fr
,也不必附加 en
。