2016-12-09 8 views
2

対のCultureInfoのPowerShellへのInt32に変換:私はこの構文を使用することができますPowerShellのC#の

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; 

は、コンパイル時にエラーを与える:

Error CS0030 Cannot convert type 'int' to 'System.Globalization.CultureInfo'

PowerShellではどのように動作し、C#と同じように動作するのですか?

答えて

3

をPowerShellは暗黙すなわちnew CultureInfo(1049)CultureInfo(Int32) constructorを呼び出します。

PowerShellの変換規則は、on MSDNと記載されています。あなたのケースでは、ルール5が適用されます。

  1. Constructor conversion. If the target type defines a constructor that takes your input, use that.

証明:私はこれを知っている

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

これはおそらくPowerShellの内部構造によって行われます。文字列を[xml]にキャストすることができます。これはおそらくC#でキャストすることでは不可能です。しかし、整数をとる静的GetCultureInfoメソッド使用:

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

。私の質問は、どのようにこの作品は、powershellでキャスト – devi

+0

あなたはそれを行う方法の答えを得たいと思っています。私は自分の答えを更新しました。 –

関連する問題