gpt4 book ai didi

c# - .NET 中系统程序集的 CultureName

转载 作者:行者123 更新时间:2023-11-30 12:26:06 25 4
gpt4 key购买 nike

在用 C# 编写一些代码处理程序集时,我注意到 Assembly 对象(System 程序集示例)的字段值不一致:

> typeof(string).Assembly.FullName
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

但是当直接访问AssemblyName对象的CultureName字段时,其值为空字符串:

> typeof(string).Assembly.GetName().CultureName
""

当我在 Linux (mono 3.99) 上运行相同的测试时,我得到了另一个结果:

> typeof(string).Assembly.GetName().CultureName
"neutral"

为什么 .NET 会这样?我在 msdn 上找不到任何关于 AssemblyName 类中 CultureName 字段的默认值或一个含义的信息空字符串。空字符串是否总是指“中性”区域性名称?

最佳答案

CultureName 属性是在 .Net 4.5 中引入的,具有中性文化的 Assembly 的该属性的值必须等于一个空字符串,例如名称不变文化,因为 CultureName 使用 CultureInfo 属性 ( source ):

public String CultureName
{
get
{
return (_CultureInfo == null) ? null : _CultureInfo.Name;
}
}

但在 Mono 中,CultureName 属性具有不同的实现方式 (source)。为什么不同?我想 Mono 的开发者知道答案。

public string CultureName { 
get {
if (cultureinfo == null)
return null;
if (cultureinfo.LCID == CultureInfo.InvariantCulture.LCID)
return "neutral";
return cultureinfo.Name;
}
}

因此,如果您想检查 AssemblyName 是否具有中性文化,请使用以下代码:

if (object.Equals(assemblyName.CultureInfo, CultureInfo.InvariantCulture))
{ /* neutral culture */ }

关于c# - .NET 中系统程序集的 CultureName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29937411/

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