首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Resharper,ICloneable和从不null

Resharper,ICloneable和从不null
EN

Stack Overflow用户
提问于 2014-06-12 19:11:11
回答 2查看 212关注 0票数 4

Resharper抱怨下面的代码,说最后一次空检查是多余的,因为‘表达式总是假的’:

代码语言:javascript
复制
  ICloneable data = item as ICloneable;
  if (data == null)
    throw new InvalidCastException("blah blah, some error message");

  object copy = data.Clone();
  if (copy == null) //  <-- this is where it complains.
    return default(T);

它怎么知道它永远不会是空的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:15:12

ReSharper假设您的对象遵守ICloneable的契约,其中除其他外,

生成的克隆必须与原始实例具有相同的类型或兼容。

根据data被检查为非空的事实以及从ICloneable.Clone() ReSharper的实现中返回相同或兼容类型的对象的假设,ReSharper得出了copy也是非空的结论,从而触发了警告。

当然,从null返回Clone是绝对可能的。但是,返回null将是一个编码错误,因此跳过空检查是个好主意。

票数 3
EN

Stack Overflow用户

发布于 2014-06-12 19:15:49

来自MSDN

实施者注意事项

ICloneable接口只要求Clone方法的实现返回当前对象实例的副本。

如果您正在满足合同的要求,则Clone方法不应该返回null

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

https://stackoverflow.com/questions/24192145

复制
相关文章

相似问题

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