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

Joh*_*van 5 powershell powershell-5.0

使用PowerShell时,偶尔我们会比较不同类型的对象.一个常见的场景是$int -eq $bool(即where 0 -eq $false,0 -ne $true和任何非零值仅等于true,但不是false).

大多数情况下这是件好事; 有时这很痛苦(例如,如果我在一个有价值的物体上寻找所有属性1,但我不想要所有有价值的物质$true).

是否有运营商在没有转换的情况下执行此比较; 即基本上与JavaScript的身份运算符(===)相同;?

奖金问题

如果有这样的操作员,是否有任何容忍度?即,虽然我不想对待1true作为相同的,但如果我可以治疗[int]1并且[long]1好像它们一样,它(有时)会有所帮助.

use*_*407 7

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

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