2017-06-16 59 views
4

使用PowerShell時,偶爾會比較不同類型的對象。常見的情況是$int -eq $bool(即其中0 -eq $false,0 -ne $true和任何非零值僅等於真,但不是假)。不含隱式類型轉換的身份操作員/比較

大部分這是一件好事,有時這是一種痛苦(例如,如果我正在尋找價值爲1的對象上的所有屬性,但我不希望所有屬性值爲$true)。

問題

是否有執行無需轉換該比較操作;即其實質上與JavaScript的身份運算符(===)相同;?

獎金問題

如果有這樣的運營商,有沒有寬容?即雖然我不想將1true視爲相同,但如果我可以將[int]1[long]1視爲它們,它將(有時)會有所幫助。

+3

'[Object] :: Equals($ a,$ b)' – PetSerAl

+0

@PetSerAl;當然!謝謝。 – JohnLBevan

+0

@PetSerAl請將此貼爲答案。也會對其他人有所幫助 – Venkatakrishnan

回答

7

PowerShell不直接提供這樣的操作符,但可以使用標準的.NET方法[Object]::Equals進行此類比較。

注:
它允許類型來實現他們擁有平等的比較通過重寫虛擬Object.Equals方法,因此可能有一些怪異的行爲,如果一些自定義的類型不正確實現它。但是,所有標準的.NET類型都應該很好,並且認爲它們本身僅等於相同類型的實例。