[英]Convert Int32 to 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适用:
- 构造函数转换。 如果目标类型定义了接受您输入的构造函数,请使用该构造函数。
证明:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.