[C#] ICompareインターフェースを使用して2つのListを比較する方法
2022-06-07

目次
はじめに
Unitテスト時に2つのList<T>の比較をICompareインターフェースを使って比較する際の方法をメモしておきます。
ICompareインタフェースで用意されている「Compare」メソッドは2つのオブジェクトを比較して、一方が他方より小さいか、同じか、または大きいかを示す値を返します。
このCompareメソッドをList<T>に対して比較できる様にします。
ICompareインタフェースの詳細は下記を参考にしてください。
非ジェネリック基本インターフェースを実装する
// メインのテストメソッド
[TestMethod]
public void Test()
{
List<Animal> list1 = new List<Animal> ()
{
new Animal("Dog", "Charlie"),
new Animal("Cat", "Mittens"),
new Animal("Cow", "Bacon"),
};
List<Animal> list2 = new List<Animal> ()
{
new Animal("Dog", "Charlie"),
new Animal("Cat", "Mittens"),
new Animal("Cow", "Bacon"),
};
// 基本的には、下記で可能
CollectionAssert.AreEqual(list1, list2, new CustomCompare());
// カスタムメッセージをもつ場合
CollectionAssert.AreEqual(list1, list2, new CustomCompare(), "true");
}
// Animalクラス
public class Animal
{
public string Breed { get; set; }
public string Name { get; set; }
}
// カスタム比較クラスを実装する
public class CustomCompare : IComparer<Animal>, IComparer
{
public int Compare(Animal a, Animal b)
{
return String.Compare(a.Name, b.Name);
}
int IComparer.Compare(object x, object y)
{
return Compare((Animal)x, (Animal)y);
}
}
最後に
単体テストでのオブジェクトの比較の場合、継承し、独自クラスを利用することで様々な比較を行うことができます。
是非ためしてみてください。
C#,プログラミングC#,Compareメソッド,ICompareインタフェース,List
Posted by Kunisura
関連記事
[C#] switch文をswitch式で表現する
はじめに 今回は、今まで利用していたswitch文をより効率的に、コード数も極力 ...
C#] Base64エンコードおよびBase64デコードまとめ
はじめに Base64とは、マルチバイと文字列やバイナリデータをテキスト形式に変 ...
[C#] RSS情報のpubDateなどの日付のフォーマットを変更する
RSSデータの日付フォーマットを変更する RSSデータのpubDateなどは、下 ...
C#を利用したAWS S3操作まとめ
はじめに 前回は、PowerShellでのAWS S3操作についてまとめました。 ...
[C#] ManagementObjectを利用したWindowsサービスの操作まとめ
はじめに C#でのサービスの開始・停止などは「System.ServicePro ...