2016-12-09 24 views
2

在PowerShell中,我可以用這個語法:轉換的Int32到CultureInfo的PowerShell的VS 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的隱式調用CultureInfo(Int32) constructor,即new CultureInfo(1049)

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

認爲你只是想得到一個答案如何做到這一點。我更新了我的答案。 –

相關問題