Wie überprüft man, ob zwei Listen von Objekten gleich sind? Ich habe die Liste A und Liste B mit derselben Struktur:Vergleichen Sie zwei komplexe Listenobjekte
[XmlRoot(ElementName = "Details")]
public class Details
{
[XmlElement(ElementName = "time")]
public string time { get; set; }
[XmlElement(ElementName = "duration")]
public string duration { get; set; }
}
[XmlRoot(ElementName = "Remark")]
public class Remark
{
[XmlElement(ElementName = "RemarkText")]
public string RemarkText { get; set; }
[XmlElement(ElementName = "isRemarkVisible")]
public Boolean IsRemarkVisible { get; set; }
}
[XmlRoot(ElementName = "test")]
public class test
{
[XmlElement(ElementName = "ID")]
public string ID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
public Details Details { get; set; }
[XmlElement(ElementName = "Remark")]
public Remark Remark { get; set; }
}
[XmlRoot(ElementName = "Tests")]
public class Tests
{
[XmlElement(ElementName = "test")]
public test[] test { get; set; }
}
ich es konvertieren mit Linq aufzulisten.
Liste A:
Test
id=1
name=abc
details
starttime=9.00
endtime=12.00
duration=1hr
Remark
RemarkText= remark1
IsRemarkVisible=true
Liste B:
Test
id=1
name=abc
details
starttime=9.00
endtime=12.00
duration=1hr
Remark
RemarkText= remark2
IsRemarkVisible=true
Hier sind sowohl die Listen sind nicht gleich (remarkText Feld). Ich möchte ein Stück Code, der diese beiden Listen vergleicht und entweder gleich oder nein zurückgibt. Wie kann ich das machen?
Ich versuchte mit List1.Except(List2)
, aber es vergleicht nicht.
bearbeiten
Ich habe benutzerdefinierte IEqualityComparer erstellt:
public class Compare : IEqualityComparer<test>
{
public bool Equals(test x, test y)
{
if (x == null || y == null) return false;
bool equals = x.ID == y.ID && x.Name == y.Name && x.Remark == y.Remark
&& x.Details == y.Details;
return equals;
}
public int GetHashCode(test codeh)
{
return (codeh.ID + codeh.Name + codeh.Remark + codeh.Details).GetHashCode();
}
}
Und
var Comparer = new Compare(); List1.Except(List2, Comparer)
Sollte diese Arbeit?
bearbeiten
[XmlRoot(ElementName = "Details")]
public class Details
{
[XmlElement(ElementName = "starttime")]
public string starttime { get; set; }
[XmlElement(ElementName = "endtime")]
public string endtime { get; set; }
[XmlElement(ElementName = "duration")]
public string duration { get; set; }
}
[XmlRoot(ElementName = "Remark")]
public class Remark
{
[XmlElement(ElementName = "RemarkText")]
public string RemarkText { get; set; }
[XmlElement(ElementName = "isRemarkVisible")]
public Boolean IsRemarkVisible { get; set; }
}
[XmlRoot(ElementName = "test")]
public class test
{
[XmlElement(ElementName = "ID")]
public string ID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
public Details Details { get; set; }
[XmlElement(ElementName = "Remark")]
public Remark Remark { get; set; }
[XmlElement(ElementName = "Tags")]
public Tags Tags { get; set; }
}
[XmlRoot(ElementName = "Tags")]
public class Tags
{
[XmlElement(ElementName = "TagLocation")]
public TagLocation[] TagLocation { get; set; }
}
[XmlRoot(ElementName = "TagLocation")]
public class TagLocation
{
[XmlElement(ElementName = "Id")]
public string Id { get; set; }
[XmlElement(ElementName = "TagText")]
public string TagText { get; set; }
}
[XmlRoot(ElementName = "Tests")]
public class Tests
{
[XmlElement(ElementName = "test")]
public test[] test { get; set; }
}
Wann sind zwei Objekte gleich? Im Allgemeinen implementieren Sie einen benutzerdefinierten IEqualityComparer und übergeben Sie es an außer. –
Wenn beide Objekte die gleichen Daten haben. In meinem Beispiel, wenn Liste B hatte remarkText = Bemerkung1 – Arti
@TimSchmelter Würden Sie bitte ein Beispiel geben, wie es zu tun ist. – Arti