2010-04-28 58 views

回答

5

平等的測試並非如此簡單。

考慮到'a' -eq 'A'返回true。這意味着PowerShell不僅僅是調用Equals。

進一步爲您的對象Equals被稱爲預期。

Add-Type -TypeDefinition @" 
    using System; 
    public class X { 
     public string Property; 
     public X(string s) { 
      Property = s; 
     } 
     public override bool Equals(object o) { 
      System.Console.WriteLine("equals on {0}", Property); 
      return Property == ((X)o).Property; 
     } 
     public override int GetHashCode() { return 20; } 
    } 
"@ 

$o1 = New-Object X 'a' 
$o2 = New-Object X 'A' 

$o1 -eq $o2 

除此之外,PowerShell使用轉換相當嚴重。因此,如果操作數不是同一類型,則右操作數將轉換爲左操作數的類型。 這就是爲什麼'1' -eq 1成功。

3

運算符-eq不是(像c#中的「==」)和Object.Equals()。簡單的例子:它執行不區分大小寫的字符串比較。事實上,它在封面上進行了很多轉換,不幸的是,其中一些轉換可能並不總是直觀的預期。

下面是一些有趣的演示

# this is False 
[ConsoleColor]::Black -eq $true 

# this is True 
$true -eq [ConsoleColor]::Black 
相關問題