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 回答