在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#中执行相同操作?
答案 0 :(得分:3)
PowerShell隐式调用CultureInfo(Int32) constructor,即new CultureInfo(1049)
。
PowerShell的转换规则已记录在案on MSDN。在您的情况下,规则5适用:
- 构造函数转换。如果目标类型定义了一个接受输入的构造函数,请使用它。
醇>
证明:
PS> Trace-Command TypeConversion { [Globalization.CultureInfo]1049 | Out-Null } -PSHost
DEBUG: TypeConversion Information: 0 : Constructor result: "ru-RU".
答案 1 :(得分:1)
这可能是由一些PowerShell内部人员完成的。就像你可以将一个字符串转换为[xml]
。在C#中进行转换可能无法做到这一点。但是,请使用带有整数的静态GetCultureInfo
方法:
var eng = System.Globalization.CultureInfo.GetCultureInfo(1033)