Resharper抱怨下面的代码,说最后一次空检查是多余的,因为‘表达式总是假的’:
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);它怎么知道它永远不会是空的?
发布于 2014-06-12 19:15:12
ReSharper假设您的对象遵守ICloneable的契约,其中除其他外,
生成的克隆必须与原始实例具有相同的类型或兼容。
根据data被检查为非空的事实以及从ICloneable.Clone() ReSharper的实现中返回相同或兼容类型的对象的假设,ReSharper得出了copy也是非空的结论,从而触发了警告。
当然,从null返回Clone是绝对可能的。但是,返回null将是一个编码错误,因此跳过空检查是个好主意。
发布于 2014-06-12 19:15:49
来自MSDN
实施者注意事项
ICloneable接口只要求Clone方法的实现返回当前对象实例的副本。
如果您正在满足合同的要求,则Clone方法不应该返回null。
https://stackoverflow.com/questions/24192145
复制相似问题