ホームページ >バックエンド開発 >C++ >C# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?

C# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-23 00:59:10447ブラウズ

How Can I Use .Except() to Find Differences Between Lists of Custom Objects in C#?

C# でのカスタム オブジェクトのリストの比較に .Except() を利用する

C# 開発では、リストの比較と操作が必要なシナリオに頻繁に遭遇します。一般的なタスクは、あるリストには存在するが別のリストには存在しない固有の要素を識別することです。 .NET Framework の .Except() メソッドは、これに対する洗練されたソリューションを提供します。

.Except() による等価比較のカスタマイズ

カスタム オブジェクトを操作する場合、等価性を定義することが重要です。 CustomObject クラスがすでに Equals()GetHashCode() をオーバーライドしている場合、または参照の等価性で十分な場合は、.Except() を直接使用できます。

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>

ただし、より微妙な等価性の定義 (ID プロパティに基づいた比較など) の場合は、IEqualityComparer<T> を実装する必要があります。

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    // Implement GetHashCode and Equals methods based on ID property...
}</code>

次に、.Except() でカスタム比較子を利用します:

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>

重複エントリへの対処

.Except() は本質的に重複した要素を削除します。結果のリストに重複を保持するには、2 番目のリストを HashSet に変換し、フィルタリング アプローチを採用することを検討してください。

<code class="language-csharp">var set2 = list2.ToHashSet();
var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>

概要

.Except() メソッドは、カスタム オブジェクトを含む 2 つのリスト間の集合の違いを見つける簡単で効率的な方法を提供します。 カスタムの等価比較を実装するか、必要に応じて重複を処理することにより、このメソッドをさまざまな比較要件に適応させることができます。

以上がC# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。