SerializationInfo实例永远不会为空
本文关键字:实例 永远 SerializationInfo | 更新日期: 2023-09-27 18:02:39
我正在编写自定义异常并为它们实现序列化。我注意到,如果在访问SerializationInfo的一个成员之前对其实例进行空检查,ReSharper会告诉我检查是多余的,并且该实例已知不是空的。它不是一个值类型,但是查阅参考源代码发现没有默认构造函数。这是ReSharper可以告诉它不会为空吗?还有其他原因吗?这可能是个bug吗?
我认为这是因为你调用基异常类的构造函数。像这样:
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的建议。