2つのオブジェクトのリストが同じかどうかを確認する方法?私は同じ構造のリストAとリストBを持っています:2つの複合リストオブジェクトを比較する
[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; }
}
linqを使ってリストに変換します。
リストA:
Test
id=1
name=abc
details
starttime=9.00
endtime=12.00
duration=1hr
Remark
RemarkText= remark1
IsRemarkVisible=true
リストB:
Test
id=1
name=abc
details
starttime=9.00
endtime=12.00
duration=1hr
Remark
RemarkText= remark2
IsRemarkVisible=true
ここでは、両方のリストは、(remarkTextフィールド)と同じではありません。私は、これらの2つのリストを比較し、同じか否かを返すコードを必要とします。どうやってやるの?
List1.Except(List2)
を使ってみましたが、比較しません。
編集
私はカスタムされたIEqualityComparer作成しました:
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();
}
}
そして
var Comparer = new Compare(); List1.Except(List2, Comparer)
万一この作品?
編集
[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; }
}
2つのオブジェクトが等しいのはいつですか?一般的にカスタム 'IEqualityComparer'を実装し、それを 'Except'に渡します。 –
両方のオブジェクトに同じデータがある場合。私の例ではリストBがあった場合remarkText = remark1 – Arti
@TimSchmelterあなたはどのようにしなければならないかの例を教えてください。 – Arti