首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CultureInfo.CurrentCulture可以为空吗?

CultureInfo.CurrentCulture可以为空吗?
EN

Stack Overflow用户
提问于 2012-11-13 18:32:20
回答 3查看 5.3K关注 0票数 12

CultureInfo.CurrentCulture可以为空吗?

空值会使我的程序崩溃,这是我不想要的。所以我问,为了安全起见,我需要这样做吗?

代码语言:javascript
复制
var culture = CultureInfo.CurrentCulture ?? CultureInfo.InvariantCulture
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-13 18:35:30

它看起来肯定是非null

区域性是正在执行的线程的属性。此只读属性等效于检索由Thread.CurrentCulture属性返回的CultureInfo对象。

如果您试图将其设置为null,则Thread.CurrentCulture将抛出异常,因此假设具有非null值是一个不变量是合乎逻辑的。

除此之外,CultureInfo.CurrentCulture给出了确定其初始值的算法:

线程的区域性是如何确定的

启动线程时,其区域性最初确定如下:

如果属性值不是null.

  • By,则通过检索由正在执行线程的应用程序域中的GetUserDefaultLocaleName属性指定的区域性来调用

  • 函数。

同样,这不会保留null值的选项。

票数 15
EN

Stack Overflow用户

发布于 2012-11-13 18:40:53

不,保证不为空。这是直接从CultureInfo.CurentCulture (通过ILSpy)返回的System.Threading.Thread.CurrentCulture的实现:

代码语言:javascript
复制
// 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

因此,如果m_CurrentUICulture为空,它将返回UserDefaultUICulture

这是来源:

代码语言:javascript
复制
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;
    }
}

如您所见,如果该值为空,则将返回CultureInfo.InvariantCulture

票数 6
EN

Stack Overflow用户

发布于 2012-11-13 18:35:08

查看.NET源代码,如果有人试图将它设置为null,它将抛出一个错误-所以不,它不能是null

代码语言:javascript
复制
/// <summary>Gets or sets the culture for the current thread.</summary>
/// <returns>A <see cref="T:System.Globalization.CultureInfo" /> representing the culture for the current thread.</returns>
/// <exception cref="T:System.NotSupportedException">The property is set to a neutral culture. Neutral cultures cannot be used in formatting and parsing and therefore cannot be set as the thread's current culture.</exception>
/// <exception cref="T:System.ArgumentNullException">The property is set to null.</exception>
/// <filterpriority>2</filterpriority>
/// <PermissionSet>
///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlThread" />
/// </PermissionSet>
[__DynamicallyInvokable]
public CultureInfo CurrentCulture
{
[__DynamicallyInvokable]
get
{
    if (AppDomain.IsAppXModel())
    {
        return CultureInfo.GetCultureInfoForUserPreferredLanguageInAppX() ?? this.GetCurrentCultureNoAppX();
    }
    return this.GetCurrentCultureNoAppX();
}
[__DynamicallyInvokable, SecuritySafeCritical]
[SecurityPermission(SecurityAction.Demand, ControlThread = true)]
set
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }
    CultureInfo.nativeSetThreadLocale(value.SortName);
    value.StartCrossDomainTracking();
    this.m_CurrentCulture = value;
}
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13359141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档