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

时间:2017-06-16 10:35:28

标签: powershell powershell-v5.0

使用PowerShell时,我们偶尔会比较不同类型的对象。常见的情况是$int -eq $bool(即0 -eq $false0 -ne $true和任何非零值仅等于true,但不是false。

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

问题

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

奖金问题

如果有这样的操作员,是否有任何容忍度?即,虽然我不想将1true视为相同,但如果我能够[int]1[long]1处理,那么(有时)会有所帮助他们是。

1 个答案:

答案 0 :(得分:7)

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

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