我有一个像这样的哈希表:
$Path = @{
"BM" = "\\srv\xy"
"BB4-L" = "\\srv\xy"
"BB4-R" = "\\srv\xy"
"HSB" = "\\srv\xy"
"IB" = "\\srv\xy"
"LM1" = "\\srv\xy"
"LM2" = "\\srv\xy"
"sis" = "\\srv\xy"
}
我的$env:username
是sis。为什么.contains()
和-contains
有所不同?
PS Z:\Powershell-Scripts\Functions> $Path -contains $env:username
False
PS Z:\Powershell-Scripts\Functions> $Path.contains($env:username)
True
如果可能的话,我总是喜欢使用PowerShell语法,但是在这种情况下我不能这样做,因为-contains
会返回false。
.contains()
和-contains
有何不同?
答案 0 :(得分:1)
摘自MS文档:
-Contains
Description: Containment operator. Tells whether a collection of reference
values includes a single test value. Always returns a Boolean value. Returns TRUE
only when the test value exactly matches at least one of the reference values.
.Contains()
方法是支持子字符串的String
对象的方法之一,因此为什么
True
,当您运行$Path.Contains($env:username)
答案 1 :(得分:1)
$Path
是System.Collections.Hashtable
。您还可以阅读以下文档:
当测试值为集合时,Contains运算符使用 参考平等。仅当引用之一时才返回TRUE 值是测试值对象的相同实例。
哈希表中的每个项目均为System.Collections.DictionaryEntry
。您正在将其与string
进行比较。由于类型不匹配,因此引用也不匹配。 Contains(System.Object key)
和ContainsKey(System.Object key)
使用键进行测试。为了使比较一致,您应该写:
$Path.Keys -contains $env:username
答案 2 :(得分:0)
我通过将hashtable.containskey更改为-contains来使代码工作。在以下代码片段中,我注释了包含.containsKey($ UserIDFromAD)的行,并添加了包含$ UserIDsFromFile.keys-包含$ UserIDFromAD的行。该代码现在可以按预期工作。
那么,.containskey和-contains之间有什么区别?
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class intf extends JInternalFrame {
public intf () {
super("Document",
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
JPanel jp = new JPanel();
JLabel jl = new JLabel("Hi I'm a label");
jp.add(jl);
this.add(jp);
this.pack();
this.repaint();
}
}