gpt4 book ai didi

c# - CultureInfo 的包装器

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:12 25 4
gpt4 key购买 nike

我想创建一个包装类来替换 CultureInfo 基类。例如;在我的代码中我有

var cultureInfo = new CultureInfo (stringVariableForCultureName);   

我想将那一行替换为另一行:

var cultureInfo = new CultureInfoWrapper (stringVariableForCultureName);

原因是我无法控制传递给初始化 CultureInfo 的值,我想避免默认 CultureInfo 的错误异常

所以我的 CultureInfoWrapper 构造函数应该是这样的:

public CultureInfoWrapper(string cultureName)
{
try
{
return new CultureInfo(cultureName);
}
catch (Exception exception)
{
return new CultureInfo(DefaultCultureName);
}
}

你能帮我定义包装类吗?

最佳答案

你可以使用这个实现,注意我已经处理了 CultureNotFoundException:

public class CultureInfoWrapper
{
private readonly CultureInfo _cultureInfo;

public CultureInfo Value
{
get { return _cultureInfo; }
}

public CultureInfoWrapper(string cultureName, string fallbackCultureName = "en-US")
{
try
{
_cultureInfo = new CultureInfo(cultureName);
}
catch (CultureNotFoundException)
{
_cultureInfo = new CultureInfo(fallbackCultureName);
}
}
}

另一种方法是一次加载所有文化,然后您可以使用这个优化版本:

public class CultureInfoFinder
{
private static readonly CultureInfo DefaultCulture = new CultureInfo("en-US");

private static Dictionary<string, CultureInfo> _allSpecificCultures;

static CultureInfoFinder()
{
_allSpecificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.ToDictionary(c => c.ToString(), c => c, StringComparer.InvariantCultureIgnoreCase);
}

public static CultureInfo Get(string cultureName)
{
CultureInfo c;
bool knownCulture = _allSpecificCultures.TryGetValue(cultureName, out c);
return knownCulture ? c : DefaultCulture;
}
}

例如:

CultureInfo deDE = CultureInfoFinder.Get("de-DE");

关于c# - CultureInfo 的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39327512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com