2010-04-28 6 views

cevap

5

eşitliği testi kadar basit olmadığı.

'a' -eq 'A''un doğru döndüğünü göz önünde bulundurun. Bu, PowerShell'in sadece Equals'ı çağırmaktan daha fazlasını yaptığı anlamına gelir.

Nesneleriniz içinse Equals beklendiği gibi çağrılmaktadır.

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 

Ayrıca bu PowerShell, dönüştürme işlemini oldukça kullanır. Dolayısıyla, işlenenler aynı türde değilse, sağ işlenen sol işlenenin türüne dönüştürülür. Bu yüzden '1' -eq 1 başarılı.

3

Operatör -qq hiçbiri (C#) ve Object.Equals() içindeki "==" gibi değildir. Basit örnek: büyük/küçük harf duyarsız dize karşılaştırması yapar. Aslında, kapaklar altında çok sayıda dönüşüm gerçekleştirir ve bazılarının maalesef, her zaman sezgisel olarak beklenmeyebilir. İşte

bazı ilginç demo

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

# this is True 
$true -eq [ConsoleColor]::Black 
İlgili konular