繁体   English   中英

将Int32转换为CultureInfo PowerShell vs C#

[英]Convert Int32 to CultureInfo PowerShell vs C#

在PowerShell中,我可以使用以下语法:

PS C:\> [globalization.cultureinfo]1049

LCID             Name             DisplayName
----             ----             -----------
1049             ru-RU            Russian (Russia)


PS C:\> [globalization.cultureinfo]1033

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)


PS C:\> [globalization.cultureinfo]1080

LCID             Name             DisplayName
----             ----             -----------
1080             fo-FO            Faroese (Faroe Islands)

但是我无法使用C#实现相同的转换:

var eng = (CultureInfo)1033;

给出编译时错误:

错误CS0030无法将类型'int'转换为'System.Globalization.CultureInfo'

它如何在PowerShell中工作,以及如何在C#中执行相同操作?

PowerShell隐式调用CultureInfo(Int32)构造函数 ,即new CultureInfo(1049)

PowerShell的转换规则记录在MSDN上 在您的情况下,规则5适用:

  1. 构造函数转换。 如果目标类型定义了接受您输入的构造函数,请使用该构造函数。

证明:

PS> Trace-Command TypeConversion { [Globalization.CultureInfo]1049 | Out-Null } -PSHost
DEBUG: TypeConversion Information: 0 : Constructor result: "ru-RU".

这可能是由某些PowerShell内部人员完成的。 就像可以将字符串转换为[xml] 通过C#强制转换可能无法实现。 但是,请使用采用整数的静态GetCultureInfo方法:

var eng = System.Globalization.CultureInfo.GetCultureInfo(1033)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM