在用 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/