我不明白为什么这不起作用,但我想知道这是怎么回事?
假设我有一个包含这些嵌套值的ArrayList:
[System.Collections.ArrayList]$al = @(@(0,1),@(1,2),@(3))
和另一个包含此值的数组:
$myObj = @(0,1)
为什么我不能用Remove()方法从$al中删除$myObj,即使$myObj包含在$al中?
$al.Remove($myObj)
谢谢!
我用简单的对象类型,比如int或string,做了这件事,它工作得很好。我认为这与数组相等有关,或者因为数组是引用类型...但如何才能实现删除呢?
1条答案
按热度按时间fcg9iug31#
为什么我不能从
$al
中删除$myObj
,即使$myObj
包含在$al
中,使用Remove()
方法?因为Arrays是引用类型,而
$myObj = @(0,1)
不是$al
中@(0,1)
的引用。参见
ArrayList.Remove(Object)
上的备注:此方法通过调用Object.Equals来确定相等性。
并且,查看
Object.Equals
文档中的备注,我们可以看到以下内容:如果当前示例是引用类型,则
Equals(Object)
方法测试引用相等性,并且对Equals(Object)
方法的调用等效于对ReferenceEquals method的调用。引用相等意味着被比较的对象变量引用相同的对象。例如,您可以尝试在
$al
中找到结构上与$myObj
匹配的对象,然后从那里删除即可。