使用PowerShell时,我们偶尔会比较不同类型的对象。常见的情况是$int -eq $bool
(即0 -eq $false
,0 -ne $true
和任何非零值仅等于true,但不是false。
大多数情况下,这是一件好事;有时它会很痛苦(例如,如果我在一个有价值1
的对象上寻找所有属性,但我不想要所有具有值$true
的对象
问题
是否有运营商在没有转换的情况下执行此比较;即基本上与JavaScript的身份运算符(===
)相同;?
奖金问题
如果有这样的操作员,是否有任何容忍度?即,虽然我不想将1
和true
视为相同,但如果我能够[int]1
和[long]1
处理,那么(有时)会有所帮助他们是。
答案 0 :(得分:7)
PowerShell不直接提供此类运算符,但您可以使用标准.NET方法[Object]::Equals
进行此类比较。
注意:
它允许类型通过覆盖虚拟Object.Equals
方法来实现它们自己的相等比较,因此如果某些自定义类型不正确地实现它,则可能有一些奇怪的行为。但是所有标准的.NET类型都应该很好,并认为它们只等于同一类型的实例。