SerializationInfo实例永远不会为空

本文关键字:实例 永远 SerializationInfo | 更新日期: 2023-09-27 18:02:39

我正在编写自定义异常并为它们实现序列化。我注意到,如果在访问SerializationInfo的一个成员之前对其实例进行空检查,ReSharper会告诉我检查是多余的,并且该实例已知不是空的。它不是一个值类型,但是查阅参考源代码发现没有默认构造函数。这是ReSharper可以告诉它不会为空吗?还有其他原因吗?这可能是个bug吗?

SerializationInfo实例永远不会为空

我认为这是因为你调用基异常类的构造函数。像这样:

protected SomeException(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
        if (info != null)
        {
            // Some work...
        }
    }

Resharper知道内部基构造函数检查info参数。我认为这是按照官方MSDN文档:

例外:
ArgumentNullException - info参数为空。
SerializationException -类名为空或HResult为零(0).

if (info == null)
    throw new ArgumentNullException("info");

如果调用基构造函数,则会得到一个值或异常。
所以Resharper说这个表达式总是正确的。这一次它是正确的,因为文档很可能永远不会更改。但在其他许多情况下,我不喜欢Resharper的建议。