You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中使用CM区域报错的原因及解决办法咨询

问题解答

这是不是C#的Bug?

不是。这是.NET Core/.NET 5+系列版本对RegionInfo构造函数的行为变更导致的,而非C#语言本身的Bug。

在.NET Framework(如4.7.2)中,RegionInfo(string name)构造函数会自动区分传入的是ISO 3166国家代码还是文化代码;但在.NET Core/.NET 5+中,该构造函数的逻辑被调整:如果传入的字符串同时匹配一个中性文化代码(此处"CM"恰好对应喀麦隆的中性文化代码),则会要求传入特定文化代码(如带语言前缀的fr-CM、en-CM),从而抛出参数异常。

修复/规避方案

针对用户输入国家代码的场景,推荐使用.NET Core 3.0及以上提供的RegionInfo.GetRegionInfoByTwoLetterCode(string twoLetterISORegionName)静态方法,该方法专门用于通过ISO 3166两位国家代码获取RegionInfo实例,不会与文化代码逻辑冲突。

修改后的代码示例:

using System;
using System.Globalization;
                    
public class Program
{
    public static void Main()
    {
        var region = RegionInfo.GetRegionInfoByTwoLetterCode("CM");
        Console.WriteLine(region.DisplayName); // 输出喀麦隆
    }
}

如果需要兼容更多场景(比如用户可能输入文化代码或国家代码),可以添加判断逻辑:

public static RegionInfo GetRegionInfo(string code)
{
    try
    {
        // 先尝试用构造函数处理文化代码场景
        return new RegionInfo(code);
    }
    catch (ArgumentException)
    {
        // 构造函数失败时,尝试用国家代码专属方法
        return RegionInfo.GetRegionInfoByTwoLetterCode(code);
    }
}

内容的提问来源于stack exchange,提问作者manymanymore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:44:55