我正在編寫一個簡單的控制檯應用程序,用於比較自定義類對象的兩個實例。對於每個屬性,我將True或False寫入控制檯窗口以顯示每個對象的屬性是否匹配。使用LINQ SequenceEqual擴展方法偶爾出現空屬性
某些屬性(如ProductLines(List屬性))可能在一個或兩個對象中爲空......或者都不爲空。由於它不接受空值,因此使用SequenceEqual會出現小問題。 是否有比我寫的代碼更好的比較兩個序列屬性的方法?
// test if either collection property is null.
if (commsA.Last().ProductLines == null || commsB.Last().ProductLines == null)
{
// if both null, return true.
if (commsA.Last().ProductLines == null && commsB.Last().ProductLines == null)
{
Console.WriteLine("Property Match:{0}", true);
}
// else return false.
else
{
Console.WriteLine("Property Match:{0}", false);
}
}
// neither property is null. compare values and return boolean.
else
{
Console.WriteLine("Property Match:{0}",
commsA.Last().ProductLines.SequenceEqual(commsB.Last().ProductLines));
}
備註 - 每次你寫'commsA.Last()'或'commsB.Last()'執行查詢。即使使用Linq to Objects,也需要創建枚舉器,並執行Last() –
緩存兩個序列的「Last()」結果。否則,您每次都有風險重複它。至少它花費你的資源,而你可以花費0代替。 – abatishchev
SequenceEqual *不接受空值...是什麼讓你認爲它沒有? (我剛剛用一個字符串數組對它進行了測試,它很好。) –