1

我在一个对象上有一个 Equals 覆盖,以检查使用预编译的 protobuf-net 序列化器对象反序列化的两个对象之间的值相等性。我已经验证了反序列化按预期发生(在那张纸条上,protobuf-net 很棒)。

这个类非常简单,但是其他更复杂的类也会出现类似的问题,所以我将使用它作为模型。

这是有问题的代码片段:

public bool Equals (CompressionConfiguration other) {
    if (ReferenceEquals(null, other)) return false;
    if (ReferenceEquals(this, other)) return true;
return string.Equals (AlgorithmName, other.AlgorithmName) &&
        (AlgorithmConfiguration == null ? other.AlgorithmConfiguration == null : 
        AlgorithmConfiguration.SequenceEqual(other.AlgorithmConfiguration));
}

在 .NET 运行时执行时,这会按预期进行计算,允许 AlgorithmConfiguration 为空值,它是 byte[] 类型的。在 Mono 下,我得到一个 SequenceEqual 空参数错误,特别是 ArgumentNullException。是什么赋予了?这不应该发生,因为只有在 AlgorithmConfiguration != null 时才应该调用 SequenceEqual。

这绝对是源头,因为如果我为 CompressionConfiguration 提供零长度字节 [],则不会发生故障。如果可能的话,我真的宁愿不发送零长度数组。我必须具有 Mono 兼容性,因为这将用于 Xamarin.Android (MonoDroid) 和 MonoTouch,以及 Mono 服务器,然后是 .NET 桌面应用程序。

4

1 回答 1

0

奇怪的是,在 Mono 下重新编译序列化程序程序集解决了这个问题,即使这不是 ArgumentNullException 的起源,而且我已经验证了对象已正确反序列化。现在一切正常。

于 2013-03-07T23:55:00.070 回答