我正在嘗試驗證我的兩個物件是否具有相同的值。
這是我的課
public class myclass
{
public List<c1> List1{ get; set; }
public List<c2> List2{ get; set; }
public List<c3> List3{ get; set; }
}
public class c1
{
public int Number{ get; set; }
public string Name{ get; set; }
public bool IsAvailable{ get; set; }
}
public class c2
{
public int Id{ get; set; }
public string Text{ get; set; }
public GUID Guid{ get; set; }
}
public class c3
{
public int? Age{ get; set; }
public string Role{ get; set; }
public bool IsDeleted{ get; set; }
}
我有這個類的 2 個實體,我想比較兩個實體之間的資料并檢查它們是否相同。
我已經嘗試對兩個物件進行序列化并進行比較,但這不起作用,因為串列中的專案可以按不同的順序排列。
我還嘗試獲取單個串列的 HashSet 并檢查它們是否相等。
var s1 = new HashSet<c1>(list1);
var s2= new HashSet<c1>(list2);
return s1.SetEquals(s2);
uj5u.com熱心網友回復:
一種解決方案是首先使用標準順序對串列進行排序,例如取決于型別的數字或字母順序,然后嘗試這樣的事情
if (myclassInstance1.list1.SequenceEqual(myclassInstance2.list1))
{
//Repeat the cycle 2 more times and then //your code
}
由于這個可以比較您需要首先對串列進行排序的序列,因此您可以使用它
編輯:這是list.sequenceEquals() 方法的檔案
uj5u.com熱心網友回復:
最好的方法是在 .NET 中使用IEqualityComparer顯式實作模型。
using System;
using System.Collections.Generic;
public class Program
{
public class MyClass
{
public List<C1> C1List { get; set; }
public List<C2> C2List { get; set; }
}
public class C1 : IEqualityComparer<C1>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Equals(C1 x, C1 y)
{
if(string.Equals(x.FirstName, y.FirstName, StringComparison.OrdinalIgnoreCase)
&& string.Equals(x.LastName, y.LastName, StringComparison.OrdinalIgnoreCase))
return true;
return false;
}
public int GetHashCode(C1 c)
{
return c.FirstName.Length * c.LastName.Length;
}
}
public class C2 : IEqualityComparer<C2>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Equals(C2 x, C2 y)
{
if(string.Equals(x.FirstName, y.FirstName, StringComparison.OrdinalIgnoreCase)
&& string.Equals(x.LastName, y.LastName, StringComparison.OrdinalIgnoreCase))
return true;
return false;
}
public int GetHashCode(C2 c)
{
return c.FirstName.Length * c.LastName.Length;
}
}
}
IEqualityComparer 將讓您完全控制“您呼叫 2 個物件相等的引數”。
至于上面的實作,我認為如果 FirstName 和 LastName 相同,則 2 個物件是相等的。
uj5u.com熱心網友回復:
嘗試排序串列,然后比較其中的資料:
List<c1> l1 = list1.OrderBy(c => c.Number).ToList();
List<c1> l2 = list2.OrderBy(c => c.Number).ToList();
bool equalValue = true;
if (l1.Count() == l2.Count()) {
for (int i = 0; i < l1.Count(); i ){
if (l1[i].IsAvailable != l2[i].IsAvailable || l1[i].Number != l2[i].Number || l1[i].Name != l2[i].Name)
{
equalValue = false;
break;
}
}
}
else {
equalValue = false;
}
return equalValue;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430773.html
標籤:C# 。网 asp.net-mvc asp.net 核心
