首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >"is“关键字:这些方法有区别吗?

"is“关键字:这些方法有区别吗?
EN

Stack Overflow用户
提问于 2011-11-17 02:17:11
回答 5查看 102关注 0票数 2

不太确定is关键字,但我认为这两者是相同的。有人能证实这一点吗?

代码语言:javascript
代码运行次数:0
运行
复制
public bool Equals(Object obj)
{ 
   if (obj == null) return false;
   MyType t = (MyType)obj;
   if (t == null) return false;
   return true;
}

另一个是..。

代码语言:javascript
代码运行次数:0
运行
复制
public bool Equals(Object obj)
{ 
   return obj is MyType;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-17 02:20:05

不,他们绝对不平等。如果(MyType)不是MyType的实例,则转换为obj将立即抛出MyType。如果转换失败,表达式将不会计算为nullas操作符显示了您期望从该转换中得到的行为。我对另一个问题的回答更详细地讨论了这一点。

票数 4
EN

Stack Overflow用户

发布于 2011-11-17 02:20:34

他们不一样。如果obj不是MyType,则第一个版本将引发异常,第二个版本将返回false

Equals()的这种实现是非常奇怪的。您确定要将MyType的所有实例视为相等吗?

票数 2
EN

Stack Overflow用户

发布于 2011-11-17 02:20:52

在第一种方法中,您将面临强制转换失败和抛出异常的风险。我认为您可能混淆了as关键字,如果转换失败,该关键字将返回null。一旦解决了这个问题,这些方法将大致等价:

代码语言:javascript
代码运行次数:0
运行
复制
public bool Equals(Object obj)
{ 
   return (obj as MyType) != null;
}

但无论如何,后者更为简洁和清晰。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8161307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档