CultureInfo.CurrentCulture能否为空?
null值会导致我的程序崩溃,这是我不想要的.所以我要问,为了安全,我需要做什么?
var culture = CultureInfo.CurrentCulture ?? CultureInfo.InvariantCulture
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 12
它看起来肯定是非保证null
:
文化是执行线程的属性.此只读属性等效于检索
CultureInfo
属性返回的对象Thread.CurrentCulture
.
Thread.CurrentCulture
如果您尝试将其设置为null
,则抛出异常,因此假设具有非null
值是不变量是合乎逻辑的.
除此之外,CultureInfo.CurrentCulture
给出确定其初始值的算法:
线程的文化是如何确定的
线程启动时,其文化初步确定如下:
通过检索
DefaultThreadCurrentCulture
执行该线程的应用程序域中的属性指定的区域性,如果属性值不是,则检索该文化null
.通过调用Windows
GetUserDefaultLocaleName
函数.
同样,这不会打开null
值的选项.
不,可以保证非空。这是System.Threading.Thread.CurrentCulture
直接从CultureInfo.CurentCulture
(通过ILSpy)返回的实现:
// System.Threading.Thread
public CultureInfo CurrentUICulture
{
[SecuritySafeCritical]
get
{
if (this.m_CurrentUICulture == null)
{
return CultureInfo.UserDefaultUICulture;
}
CultureInfo cultureInfo = null;
if (!Thread.nativeGetSafeCulture(this, Thread.GetDomainID(), true, ref cultureInfo) || cultureInfo == null)
{
return CultureInfo.UserDefaultUICulture;
}
return cultureInfo;
}
// setter following
Run Code Online (Sandbox Code Playgroud)
因此,如果m_CurrentUICulture
为null,它将返回UserDefaultUICulture
。
这是来源:
internal static CultureInfo UserDefaultUICulture
{
get
{
CultureInfo cultureInfo = CultureInfo.s_userDefaultUICulture;
if (cultureInfo == null)
{
CultureInfo.s_userDefaultUICulture = CultureInfo.InvariantCulture;
cultureInfo = CultureInfo.InitUserDefaultUICulture();
CultureInfo.s_userDefaultUICulture = cultureInfo;
}
return cultureInfo;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,即使是null CultureInfo.InvariantCulture
也会被返回。
归档时间: |
|
查看次数: |
3862 次 |
最近记录: |