PowerShell 中的对象相等标准是什么?ServiceController 如何定义 Equals 方法?
What is the object equality standard in PowerShell and how does ServiceController define the Equals method?
我在 PowerShell 中尝试了这些命令:
$a1 = (Get-Service)
$a2 = (Get-Service)
$a1[0] -eq $a2[0]
令我惊讶的是,结果是错误的。然后我仔细检查了它们的值,发现它们是相同的服务。
属于同一服务的两个对象怎么可能不相等?
PowerShell 中的对象相等标准是什么?
我发现一部分原因是因为 System.ServiceProcess.ServiceController Object returns 中的方法 Equals false.
但是系统比较怎么样呢?这是我现在不明白的。
它们不是同一个对象。它们可能包含相同的数据或值,但它们是ServiceController
的不同实例 ] 对象。
举个例子:
$obj = new-object pscustomobject -Property @{123=456}
$obj2 = new-object pscustomobject -Property @{123=456}
您认为这些是相同的对象吗?尽管它们包含相同的数据,但它们是两个独立的实例,因此 $obj1 -eq $obj2
将始终 return $false
同样,使用 .NET System.Object
中的 equals()
方法,一切都继承自该方法:
> $obj.equals($obj2)
False
我找到了一部分原因。那是因为 Equals
方法 System.ServiceProcess.ServiceController returns 的错误值。
我在 PowerShell 中尝试了这些命令:
$a1 = (Get-Service)
$a2 = (Get-Service)
$a1[0] -eq $a2[0]
令我惊讶的是,结果是错误的。然后我仔细检查了它们的值,发现它们是相同的服务。
属于同一服务的两个对象怎么可能不相等?
PowerShell 中的对象相等标准是什么?
我发现一部分原因是因为 System.ServiceProcess.ServiceController Object returns 中的方法 Equals false.
但是系统比较怎么样呢?这是我现在不明白的。
它们不是同一个对象。它们可能包含相同的数据或值,但它们是ServiceController
的不同实例 ] 对象。
举个例子:
$obj = new-object pscustomobject -Property @{123=456}
$obj2 = new-object pscustomobject -Property @{123=456}
您认为这些是相同的对象吗?尽管它们包含相同的数据,但它们是两个独立的实例,因此 $obj1 -eq $obj2
将始终 return $false
同样,使用 .NET System.Object
中的 equals()
方法,一切都继承自该方法:
> $obj.equals($obj2)
False
我找到了一部分原因。那是因为 Equals
方法 System.ServiceProcess.ServiceController returns 的错误值。