Sync'd Hashtable не совместим с PowerShell.Попробуйте: [HashTable] :: Synchronized (@ {}) - PullRequest
3 голосов
/ 20 октября 2010

У меня есть объект, полученный из .Net, который имеет свойство типа SyncHashTable, которое не может быть просмотрено без создаваемого исключения.

Однострочный репро:

[HashTable]::Synchronized(@{})

Многострочно играть с репро:

$ht = new-object hashtable
$ht.add("foo", "bar")
$hts = [Hashtable]::Synchronized($ht)
$hts

Ошибка:

format-default : Object reference not set to an instance of an object.
    + CategoryInfo          : NotSpecified: (:) [format-default], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.FormatDefaultCommand

У кого-нибудь есть понимание этого?

1 Ответ

6 голосов
/ 21 октября 2010

Получил от Microsoft сообщение, что это можно сделать так:

PS> $r = [hashtable]::Synchronized(@{})
PS> $r|format-table -expand coreonly -autoSize

Count IsReadOnly IsFixedSize IsSynchronized SyncRoot      Keys Values
----- ---------- ----------- -------------- --------      ---- ------
    0      False       False           True System.Object {}   {}

PS> $r.Add("key","value")
PS> $r["key"]
value

Очевидно, это ошибка в способе форматирования типа для отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...