我有一個對象的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