2010-10-20 4 views
3

У меня есть объект, исходящий из .Net, который имеет свойство типа SyncHashTable, которое не может быть просмотрено без генерируемого исключения.Sync'd Hashtable не поддерживает PowerShell. Попробуйте: [HashTable] :: Synchronized (@ {})

Однострочная репродукция:

[HashTable]::Synchronized(@{}) 

Многоканальный легче играть с Repro:

$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 

Кто-нибудь есть какие-либо понять в этом?

ответ

6

Got слово назад от 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 

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

+1

BTW, если хотите, проголосуйте за ошибку здесь - https://connect.microsoft.com/PowerShell/feedback/details/615449/display-of-synchronized-hashtable-generates-error –

Смежные вопросы