2010-04-28 5 views
5

पावरहेल परीक्षण संदर्भ समानता (जैसे "==" सी # में) "-eq" करता है या यह ऑब्जेक्ट को कॉल करने के बराबर करता है। एक्वाल्स()क्या बिजली शैल परीक्षण संदर्भ समानता में कीवर्ड है या ऑब्जेक्ट का उपयोग करता है। एक्वाल्स()

उत्तर

5

समानता पर परीक्षण इतना आसान नहीं है।

विचार करें कि 'a' -eq 'A' सत्य लौटाता है। इसका मतलब है कि PowerShell केवल बराबर कॉल करने से कुछ और करता है।

आपकी ऑब्जेक्ट्स 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 

इसके अलावा पावरशेल रूपांतरण का काफी उपयोग करता है। तो यदि ऑपरेंड एक ही प्रकार के नहीं हैं, तो सही ऑपरेंड बाएं ऑपरेंड के प्रकार में परिवर्तित हो जाता है। यही कारण है कि '1' -eq 1 सफल होता है।

3

ऑपरेटर -ईक इनमें से कोई नहीं है (जैसे "==" सी # में) और ऑब्जेक्ट। एक्वाल्स()। सरल उदाहरण: यह मामला असंवेदनशील स्ट्रिंग तुलना करता है। वास्तव में, यह कवर के तहत बहुत सारे रूपांतरण करता है और उनमें से कुछ दुर्भाग्यवश, हमेशा सहजता से अपेक्षित नहीं हो सकते हैं।

यहाँ कुछ दिलचस्प डेमो

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

# this is True 
$true -eq [ConsoleColor]::Black 
संबंधित मुद्दे

 संबंधित मुद्दे