我有一个对象的Equals重写,用于检查使用预编译的protobuf-net serialiser对象反序列化的两个对象之间的值相等。我已经验证了反序列化按预期发生(在该笔记上,protobuf-net很棒)。Mono vs .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空值,这是字节[]型。在Mono下,我得到一个SequenceEqual null参数错误,特别是一个ArgumentNullException。是什么赋予了?这不应该发生,因为只有在AlgorithmConfiguration!= null时才应该调用SequenceEqual。
这绝对是源,因为如果我为CompressionConfiguration提供零长度字节[],则不会发生故障。如果可能,我真的不想发送零长度的数组。 我必须具有单声道兼容性,因为这是用于Xamarin.Android(MonoDroid)和MonoTouch,以及单声道服务器,然后是.NET桌面应用程序。
它看起来像AlgorithmConfiguration不为null等.AlgorithmConfiguration为空。这将通过你所有的支票。 – 2013-03-07 23:44:24
它是相同的对象 - 并且AlgorithmConfiguration肯定是null。这是一个好点,谢谢!我将添加该案例。 另外,我只是重新编译了serialiser,现在它完美地工作。我感到困惑。我没有改变任何东西......无论如何,它现在有效。也许预编译的serializer必须重新编译为使用Mono编译器在Mono下使用 - 我认为它使用的是我的Windows机器上编译的dll。它反过来了! – zenith 2013-03-07 23:48:07
如果它是同一个对象,那么这个“这个”检查就会发现它 – 2013-03-09 10:16:50