将Int32转换为CultureInfo PowerShell与C#

时间:2016-12-09 12:16:44

标签: c# powershell casting

在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#中执行相同操作?

2 个答案:

答案 0 :(得分:3)

PowerShell隐式调用CultureInfo(Int32) constructor,即new CultureInfo(1049)

PowerShell的转换规则已记录在案on MSDN。在您的情况下,规则5适用:

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

证明:

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)