不太确定is
关键字,但我认为这两者是相同的。有人能证实这一点吗?
public bool Equals(Object obj)
{
if (obj == null) return false;
MyType t = (MyType)obj;
if (t == null) return false;
return true;
}
另一个是..。
public bool Equals(Object obj)
{
return obj is MyType;
}
发布于 2011-11-16 18:20:05
不,他们绝对不平等。如果(MyType)
不是MyType
的实例,则转换为obj
将立即抛出MyType
。如果转换失败,表达式将不会计算为null
。as
操作符显示了您期望从该转换中得到的行为。我对另一个问题的回答更详细地讨论了这一点。
发布于 2011-11-16 18:20:34
他们不一样。如果obj
不是MyType
,则第一个版本将引发异常,第二个版本将返回false
。
Equals()
的这种实现是非常奇怪的。您确定要将MyType
的所有实例视为相等吗?
发布于 2011-11-16 18:20:52
在第一种方法中,您将面临强制转换失败和抛出异常的风险。我认为您可能混淆了as
关键字,如果转换失败,该关键字将返回null
。一旦解决了这个问题,这些方法将大致等价:
public bool Equals(Object obj)
{
return (obj as MyType) != null;
}
但无论如何,后者更为简洁和清晰。
https://stackoverflow.com/questions/8161307
复制相似问题