如何为哈希表指定数据类型?

时间:2015-06-19 10:29:07

标签: powershell types hashtable int32

默认情况下,PowerShell哈希表(@{})似乎是字符串→字符串的映射。但我希望我的值类型为Int32,以便我可以对其进行计算。

如何在声明哈希表变量时指定类型信息?

2 个答案:

答案 0 :(得分:5)

Hashtables将键映射到值。键和值的类型并不重要。

PS C:\> $ht = @{}
PS C:\> $ht[1] = 'foo'
PS C:\> $ht['2'] = 42
PS C:\> $ht

Name                           Value
----                           -----
2                              42
1                              foo

PS C:\> $fmt = "{0} [{1}]`t-> {2} [{3}]"
PS C:\> $ht.Keys | % {$fmt -f $_, $_.GetType().Name, $ht[$_], $ht[$_].GetType().Name}
2 [String]      -> 42 [Int32]
1 [Int32]       -> foo [String]

如果字符串中有整数并想要将其作为整数赋值,则只需将其转换为赋值:

PS C:\> $ht[3] = [int]'23'
PS C:\> $ht.Keys | % {$fmt -f $_, $_.GetType().Name, $ht[$_], $ht[$_].GetType().Name}
2 [String]      -> 42 [Int32]
3 [Int32]       -> 23 [Int32]
1 [Int32]       -> foo [String]

答案 1 :(得分:0)

string的替代方法是Dictionary,它允许显式指定键和值的类型。

以下,将创建具有int键和[System.Collections.Generic.Dictionary[string, int]] $dict = @{} $dict['a'] = 42 # Ok $dict['b'] = '42' # Ok (implicit type conversion) $dict['c'] = 'abc' # Error: Cannot convert value "abc" to type "System.Int32" 值的字典:

class MyClass {
    constructor(foos: Collection<Foo>) {
        this.myObjects = parseFoos(foos)
    }

    constructor(bars: List<Bar>) {
        this.instructions = parseBars(bars)
    }

    constructor(bazs: ArrayList<Baz>) {
        this.instructions = parseBazs(bazs)
    }
}