Хеш-таблица Powershell, хранящая значения "System.Collections.DictionaryEntry"
Когда я выполняю команду:
$var = @{a=1;b=2}
в Powershell (версия 3), $var
заканчивается значением {System.Collections.DictionaryEntry, System.Collections.DictionaryEntry}
, Почему это происходит? Как я могу сохранить значения, которые я хочу сохранить?
1 ответ
Это потому, что ваш ISE перечисляет коллекцию для создания дерева переменных, а объекты возвращаются из HashtableEnumerator
который вы получаете от $var.GetEnumerator()
являются DictionaryEntry
-объекты.
$var = @{a=1;b=2}
#Collection is a Hashtable
$var | Get-Member -MemberType Properties
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
Count Property int Count {get;}
IsFixedSize Property bool IsFixedSize {get;}
IsReadOnly Property bool IsReadOnly {get;}
IsSynchronized Property bool IsSynchronized {get;}
Keys Property System.Collections.ICollection Keys {get;}
SyncRoot Property System.Object SyncRoot {get;}
Values Property System.Collections.ICollection Values {get;}
#Enumerated objects (is that a word?) are DictionaryEntry(-ies)
$var.GetEnumerator() | Get-Member -MemberType Properties
TypeName: System.Collections.DictionaryEntry
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = Key
Key Property System.Object Key {get;set;}
Value Property System.Object Value {get;set;}
Ваше значение (1 и 2) хранится в Value
-собственность на объекты в то время как они Key
это идентификатор, который вы использовали (а и б).
Вы должны заботиться об этом, только когда вам нужно перечислить хеш-таблицу, напр. Когда вы просматриваете каждый элемент. Для обычного использования это закулисная магия, поэтому вы можете использовать $var["a"]
,