在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适用:
- 构造函数转换。如果目标类型定义了获取输入的构造函数,请使用。
证明:
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)