【问题标题】:SerializationInfo Instance Is Never Null?SerializationInfo 实例永远不会为空?
【发布时间】:2016-08-15 16:11:59
【问题描述】:

我正在编写自定义异常并为它们实现序列化。我注意到,如果我在访问其中一个成员之前对 SerializationInfo 的实例进行空检查,ReSharper 会告诉我检查是多余的,并且该实例已知不为空。它不是一个值类型,但在Reference Source 上四处寻找告诉我没有默认构造函数。这是 ReSharper 如何判断它不会为空的吗?还有其他原因吗?这可能是一个错误吗?

【问题讨论】:

  • 在该语句之前,它是否已经在代码中的其他地方使用过?
  • @BenjaminDrolet - 它被用作构造函数中的参数,该构造函数派生自具有相同参数的基本异常构造函数。它还被用作基方法 GetObjectData 的覆盖中的参数。
  • @bubbleking this 可能会回答你的问题

标签: c# .net visual-studio serialization resharper


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多