CultureInfo 的包装器
Wrapper for CultureInfo
我想创建一个包装器 class 来替换 CultureInfo 基础 class。例如;在我的代码中我有
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);
}
}
你能帮我定义包装器吗class?
您可以使用此实现,请注意我已经处理了 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");
我想创建一个包装器 class 来替换 CultureInfo 基础 class。例如;在我的代码中我有
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);
}
}
你能帮我定义包装器吗class?
您可以使用此实现,请注意我已经处理了 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");