【发布时间】:2012-03-11 15:02:08
【问题描述】:
请在下面的代码中查看我的评论。我应该如何检查参数是否为null?看起来null 被强制转换为Foo,这实际上是对== 运算符的递归调用。为什么会这样?
public class Foo
{
public static bool operator ==(Foo f1, Foo f2)
{
if (f1 == null) //This throw a StackOverflowException
return f2 == null;
if (f2 == null)
return f1 == null;
else
return f1.Equals((object)f2);
}
public static bool operator !=(Foo f1, Foo f2)
{
return !(f1 == f2);
}
public override bool Equals(object obj)
{
Foo f = obj as Foo;
if (f == (Foo)null)
return false;
return false;
}
public override int GetHashCode()
{
return 0;
}
}
【问题讨论】:
-
您在 == 运算符的实现中使用 == 运算符 - 它属于同一类型。您在这里需要的是 Object.ReferenceEquals 来测试 null。
-
如果不是
Foo,您希望null在==操作中属于什么类型? -
@harold:我在
null上使用它,而不是在同一类型上。 -
@Ropstah 左操作数使它成为那种类型虽然
-
相关:stackoverflow.com/questions/73713/…(解决方法中的一个线程)
标签: c# .net operator-overloading stack-overflow