身份运算符/没有隐式类型转换的比较

Identity Operator / Comparison without Implicit Type Conversion

在使用 PowerShell 时,我们偶尔会比较不同类型的对象。一个常见的场景是 $int -eq $bool(即 0 -eq $false0 -ne $true,并且任何非零值只等于 true,而不等于 false)。

大多数情况下这是件好事;有时这很痛苦(例如,如果我正在寻找一个对象的所有具有值 1 的属性,但我不想要所有具有值 $true 的属性)。

问题

是否有一个运算符可以在不进行转换的情况下执行此比较;即本质上与 JavaScript 的身份运算符 (===) 相同;?

加分题

如果有这样的运营商,有容忍度吗?也就是说,虽然我不想将 1true 视为相同,但如果我可以将 [int]1[long]1 视为相同(有时)会有所帮助.

PowerShell 不直接提供此类运算符,但您可以使用标准 .NET 方法 [Object]::Equals 进行此类比较。

注:
它允许类型通过覆盖虚拟 Object.Equals 方法来实现它们自己的相等性比较,因此如果某些自定义类型不正确地实现它,可能会出现一些奇怪的行为。但是所有标准 .NET 类型都应该没问题,并且认为它们自己只等于相同类型的实例。