繁体   English   中英

SerializationInfo实例永远不会为空?

[英]SerializationInfo Instance Is Never Null?

我正在编写自定义异常并为它们实现序列化。 我注意到,如果我在访问SerializationInfo实例之一之前对其进行空检查,则ReSharper会告诉我该检查是多余的,并且该实例不为空。 它不是值类型,但在参考源上浏览时发现没有默认构造函数。 这是ReSharper如何判断它不会为空吗? 还有其他原因吗? 这可能是错误吗?

我认为这是因为您调用了基本Exception类的构造函数。 像这样:

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

Resharper知道内部的基本构造函数会检查info参数。 我认为这符合官方的MSDN文档:

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

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

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

暂无
暂无

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

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