この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Enumerable.SequenceEqual<TSource> メソッド (IEnumerable<TSource>, IEnumerable<TSource>)

 

公開日: 2016年10月

型に対して既定の等値比較子を使用して要素を比較することで、2 つのシーケンスが等しいかどうかを決定します。

名前空間:   System.Linq
アセンブリ:  System.Core (System.Core.dll 内)

public static bool SequenceEqual<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second
)

パラメーター

first
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> と比較する secondです。

second
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> 最初のシーケンスと比較します。

戻り値

Type: System.Boolean

true 要素は、その型の既定の等値比較子に従って等しい場合は 2 つのソース シーケンスが同じ長さで、それに対応します。それ以外の場合、 falseです。

型パラメーター

TSource

入力シーケンスの要素の型。

Exception Condition
ArgumentNullException

first または secondnull です。

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) メソッドは、2 つのソース シーケンスを並列を列挙し、対応する要素を比較するには、既定の等値比較子を使用して TSource, 、Defaultです。 既定の等値比較子 Default, 、実装する型の値を比較に使用される、 IEqualityComparer<T> ジェネリック インターフェイスです。 カスタム データ型を比較する必要がありますこのインターフェイスを実装でき、独自 GetHashCodeEquals の型のメソッドです。

次のコード例を使用する方法を示します SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 2 つのシーケンスが等しいかどうかを確認します。 最初の 2 つの例では、このメソッドは、比較対象のシーケンスが同じオブジェクトへの参照を含めるかどうかを判定します。 3 番目と 4 番目の例では、メソッドは、シーケンス内のオブジェクトの実際のデータを比較します。

この例では、シーケンスが等しいです。

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void SequenceEqualEx1()
{
    Pet pet1 = new Pet { Name = "Turbo", Age = 2 };
    Pet pet2 = new Pet { Name = "Peanut", Age = 8 };

    // Create two lists of pets.
    List<Pet> pets1 = new List<Pet> { pet1, pet2 };
    List<Pet> pets2 = new List<Pet> { pet1, pet2 };

    bool equal = pets1.SequenceEqual(pets2);

    Console.WriteLine(
        "The lists {0} equal.",
        equal ? "are" : "are not");
}

/*
 This code produces the following output:

 The lists are equal.
*/

次のコード例では、等しくない 2 つのシーケンスを比較します。 シーケンスが同一のデータを含むが、含まれるオブジェクトに別の参照があるため、シーケンスは考慮されませんと同じことに注意してください。

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void SequenceEqualEx2()
{
    Pet pet1 = new Pet() { Name = "Turbo", Age = 2 };
    Pet pet2 = new Pet() { Name = "Peanut", Age = 8 };

    // Create two lists of pets.
    List<Pet> pets1 = new List<Pet> { pet1, pet2 };
    List<Pet> pets2 =
        new List<Pet> { new Pet { Name = "Turbo", Age = 2 }, 
                        new Pet { Name = "Peanut", Age = 8 } };

    bool equal = pets1.SequenceEqual(pets2);

    Console.WriteLine("The lists {0} equal.", equal ? "are" : "are not");
}

/*
 This code produces the following output:

 The lists are not equal.
*/

実装する必要の参照を比較するだけではなくシーケンス内のオブジェクトの実際のデータを比較する場合、 IEqualityComparer<T> クラスのジェネリック インターフェイスです。 次のコード例は、ヘルパー クラスでこのインターフェイスを実装して提供する方法を示しています。 GetHashCodeEquals メソッドです。

public class ProductA
{ 
    public string Name { get; set; }
    public int Code { get; set; }
}

public class ProductComparer : IEqualityComparer<ProductA>
{

    public bool Equals(ProductA x, ProductA y)
    {
        //Check whether the objects are the same object. 
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether the products' properties are equal. 
        return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
    }

    public int GetHashCode(ProductA obj)
    {
        //Get hash code for the Name field if it is not null. 
        int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();

        //Get hash code for the Code field. 
        int hashProductCode = obj.Code.GetHashCode();

        //Calculate the hash code for the product. 
        return hashProductName ^ hashProductCode;
    }
}

このインターフェイスを実装した後は、シーケンスを使用して ProductA 内のオブジェクト、 SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) メソッドを次の例に示すようにします。


ProductA[] storeA = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "orange", Code = 4 } };

ProductA[] storeB = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "orange", Code = 4 } };

bool equalAB = storeA.SequenceEqual(storeB);

Console.WriteLine("Equal? " + equalAB);

/*
    This code produces the following output:

    Equal? True
*/

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
3.5 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: