【问题标题】:Reference ENUM by index按索引引用 ENUM
【发布时间】:2019-08-30 19:00:01
【问题描述】:

我需要实现一个查找表方案。我可以用哈希表来做。所以

$fruit = @{
    0 = 'Apple'
    1 = 'Pear'
    2 = 'Kiwi'
}

$fruit[1]

但在我看来,ENUM 是正确的原生数据类型。但是,虽然我可以获取特定枚举名称的索引,但我似乎无法通过引用值/索引来获取名称。这不起作用。

Enum Fruit {
    Apple
    Pear
    Kiwi
}

[fruit]::1

我只是完全不了解 ENUM 吗?因为在我看来,使用 [fruit]::'Pear'.value__ 查找索引与我想做的相反。

对于上下文,我想要一个 ENUM,它为我从

返回的整数提供相应的字符串
(Get-WmiObject -class:Win32_ComputerSystem -computerName:. -nameSpace:'root\CIMV2').PCSystemType

最终我想将这些 ENUM 本地化为 PSD1 文件,因此当 PCSystemType 为 2 时,我的法语用户将获得“便携式”,而说英语的用户将获得“移动”。请注意,我实际上不确定“便携式”是否正确。我需要找一个朋友进行本地化,但你明白了。

不管怎样,有没有直接的路线,给定索引,得到名字?或者是将枚举强制为数组或哈希表的唯一选择,此时没有理由使用枚举?

编辑:@andy-arismendi 回答了 :: 问题 here。它正在调用 [fruit] 类型的静态方法,这不是我们想要的。而且由于它是 .NET 类型,我猜也需要 .NET 方式来引用索引,这不需要像 PowerShell 那样使用 [#]?更多学习! ;)

【问题讨论】:

  • 我猜你可以这样做 [fruit]::GetValues([fruit])[0].
  • 0..2|%{[fruit]($_)}[enum]::getvalues([type]'Fruit')|%{'{0}:{1}' -f $_.value__,$_}
  • 啊@Edijs Perkums,这是强制的,但非常简洁。对我来说 [fruit]::[1] 或 [fruit]::1 不起作用似乎很奇怪,但这就是我仍然需要学习的内容。 ;)

标签: powershell enums


【解决方案1】:

将枚举用作 [fruit]1 将起作用

【讨论】:

  • 哦,快!这就是我认为应该可能的事情,但我显然是在找错树来做这件事。谢谢@Richard Siddaway!现在做一些研究以更好地理解双冒号的含义。 ;)
  • 双冒号通常用于访问静态方法或属性。无需创建类的实例即可访问静态方法/属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
相关资源
最近更新 更多