Windows 앱
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Enumerable.Except<TSource> 메서드 (IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

 

지정된 IEqualityComparer<T>로 값을 비교하여 두 시퀀스의 차집합을 구합니다.

네임스페이스:   System.Linq
어셈블리:  System.Core.dll의 System.Core

public static IEnumerable<TSource> Except<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second,
	IEqualityComparer<TSource> comparer
)

매개 변수

first

second에 없는 해당 요소를 반환할 IEnumerable<T>입니다.

second

첫 번째 시퀀스에 해당 요소가 있는 경우 반환되는 시퀀스에서 해당 요소를 제거할 IEnumerable<T>입니다.

comparer

값을 비교할 IEqualityComparer<T>입니다.

반환 값

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

두 시퀀스 요소의 차집합이 들어 있는 시퀀스입니다.

형식 매개 변수

TSource

입력 시퀀스 요소의 형식입니다.

Exception Condition
ArgumentNullException

first 또는 secondnull인 경우

comparernull이면 기본 같음 비교자인 Default를 사용하여 값을 비교합니다.

다음 예제에서는 Except<TSource> 메서드에서 사용할 수 있는 동등 비교자를 구현하는 방법을 보여 줍니다.

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

// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Product x, Product y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        //Check whether the products' properties are equal.
        return x.Code == y.Code && x.Name == y.Name;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(Product product)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(product, null)) return 0;

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

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

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

}

이 비교자를 구현하여 후에는 다음 예제와 같이 Except<TSource>메서드의 Product개체 시퀀스를 사용할 수 있습니다.

Product[] fruits1 = { new Product { Name = "apple", Code = 9 }, 
                       new Product { Name = "orange", Code = 4 },
                        new Product { Name = "lemon", Code = 12 } };

Product[] fruits2 = { new Product { Name = "apple", Code = 9 } };

//Get all the elements from the first array
//except for the elements from the second array.

IEnumerable<Product> except =
    fruits1.Except(fruits2, new ProductComparer());

foreach (var product in except)
    Console.WriteLine(product.Name + " " + product.Code);

/*
  This code produces the following output:

  orange 4
  lemon 12
*/

Universal Windows Platform
4.5 이후에 사용 가능
.NET Framework
3.5 이후에 사용 가능
Portable Class Library
portable .NET platforms에서 지원 portable .NET platforms
Silverlight
2.0 이후에 사용 가능
Windows Phone Silverlight
7.0 이후에 사용 가능
Windows Phone
8.1 이후에 사용 가능
맨 위로 이동
표시:
© 2016 Microsoft