Powershell の "-eq" は等価性をテストしますか (C# の "==" のように)、または Object.Equals() の呼び出しと同等のことを行いますか?
1092 次
2 に答える
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
それに加えて、PowerShell は変換をかなり頻繁に使用します。したがって、オペランドが同じ型でない場合、右側のオペランドは左側のオペランドの型に変換されます。だからこそ'1' -eq 1
成功する。
于 2010-04-28T14:32:19.677 に答える
4
演算子 -eq は (c# の "==" のように) および Object.Equals() のいずれでもありません。簡単な例: 大文字と小文字を区別しない文字列比較を実行します。実際、内部で多くの変換を実行しますが、残念ながら、それらのいくつかは、必ずしも直感的に期待できるとは限りません。
ここにいくつかの興味深いデモがあります
# this is False
[ConsoleColor]::Black -eq $true
# this is True
$true -eq [ConsoleColor]::Black
于 2010-04-28T14:06:06.593 に答える