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);
它怎么知道它永远不会为空?
答案 0 :(得分:3)
ReSharper假设您的对象遵守ICloneable
的合同,其中包含其他内容
The resulting clone must be of the same type as, or compatible with, the original instance.
从data
被检查为非null并且假设您从ICloneable.Clone()
ReSharper的实现中返回相同或兼容类型的对象的假设得出结论copy
也是非空的,触发警告。
当然,绝对可以从null
返回Clone
。但是,返回null
将是编码错误,因此跳过该空检查是个好主意。
答案 1 :(得分:2)