【发布时间】:2020-03-08 18:39:52
【问题描述】:
看起来 PowerShell 中有不同类型的哈希表,有区分大小写的,有的不区分大小写。当将哈希表定义为以下时不区分大小写:
$ht = @{ "Test" = "HI" }
$ht.Contains("test") #returns true, even with key name lowercase
True
$ht.ContainsKey("test") #returns true, even with key name lowercase
True
$ht.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
但是,如果您这样定义它区分大小写:
$ht_caseSensitive = New-Object System.Collections.Hashtable
$ht_caseSensitive.Add("Test", "HI")
$ht_caseSensitive.Contains("test") # returns false, since it's all lowercase
False
$ht_caseSensitive.ContainsKey("test") # returns false, same with contains key function
False
$ht_caseSensitive.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
但是,如GetType() 输出所示,我似乎找不到区分这些对象的方法。
- 为什么一种区分大小写而另一种不区分?
- 有什么办法我 当重要的是要知道是否 我正在处理是否区分大小写的哈希表?
【问题讨论】:
-
默认情况下 PS 哈希表不区分大小写。仅通过在您的第二个示例中定义对象或几个非常罕见的方法,例如导出/导入 xml 是否可以区分大小写。
-
这也是一个 PSScriptAnalyzer 规则:UseLiteralInitializerForHashtable
标签: powershell hashtable