将INT32转换为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)

最新更新