How to check exists culture in .NET

前端 未结 4 1751
生来不讨喜
生来不讨喜 2021-01-17 08:39

I have this code, when I try to get not existed culture I get exception.
Is there exists method like TryGetCultureInfo, which return bool val

4条回答
  •  星月不相逢
    2021-01-17 09:31

    I think there's no such method. So you could just try-catch or check all installed cultures:

    string cultureCode = "de-DE";
    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
    var culture = cultures.FirstOrDefault(c => c.Name.Equals(cultureCode, StringComparison.OrdinalIgnoreCase));
    if (culture == null)
    {
        culture = cultures.FirstOrDefault(c => c.Name.Equals(DefaultCultureCode, StringComparison.OrdinalIgnoreCase));
        if (culture == null)
            culture = CultureInfo.CurrentCulture;
    }
    

    But i would prefer the try-catch, i'm sure it is more efficient.

    public bool TryGetCultureInfo(string cultureCode, string DefaultCultureCode, out CultureInfo culture)
    {
        try
        {
            culture = CultureInfo.GetCultureInfo(cultureCode);
            return true;
        } catch(CultureNotFoundException)
        {
            if (DefaultCultureCode == null)
                culture = CultureInfo.CurrentCulture;
            else
            {
                try
                {
                    culture = CultureInfo.GetCultureInfo(DefaultCultureCode);
                } catch (CultureNotFoundException)
                {
                    culture = CultureInfo.CurrentCulture;
                }
            }
        }
        return false;
    }
    

提交回复
热议问题