繁体   English   中英

Resharper,ICloneable,永不为空

[英]Resharper, ICloneable and never null

Resharper抱怨以下代码,说最后一次空检查是多余的,因为'表达式始终为false':

  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);

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

ReSharper认为你的对象遵守ICloneable的合同,其中包括ICloneable的合同

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

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

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

来自MSDN

对实施者的说明
ICloneable接口只需要您的Clone方法实现返回当前对象实例的副本。

如果您满足合同的要求, Clone方法永远不应返回null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM