power shell中的-eq关键字测试引用相等还是使用Object.Equals()

Wil*_*ill 6 .net powershell equality

Powershell中的"-eq"是否测试引用相等(如c#中的"==")或它是否相当于调用Object.Equals()

ste*_*tej 6

对平等的考验并非如此简单.

考虑'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
Run Code Online (Sandbox Code Playgroud)

除了PowerShell使用转换非常重要.因此,如果操作数的类型不同,则右操作数将转换为左操作数的类型.这就是'1' -eq 1成功的原因.