은 결국 우리가 알고하지 않은 Enumerable.Except 방법에 대해 뭔가 밝혀졌다 우리의 코드에서 버그를 디버깅 시간 이상 소요 데에 대한 자세한 일반적으로Enumerable.Except가 DISTINCT 항목을 반환하는 이유는 무엇입니까?
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = Enumerable.Empty<int>();
ilist.Except(ilist2); // returns { 1 } as opposed to { 1, 1, 1, 1 }
나 :
var ilist3 = new[] { 1 };
var ilist4 = new[] { 1, 1, 2, 2, 3 };
ilist4.Except(ilist3); // returns { 2, 3 } as opposed to { 2, 2, 3 }
은 MSDN 페이지에서 상대 :
이 방법은 두 번째에 표시되지 않는 처음에 그 요소를 반환합니다. 또한 은 처음에 나타나지 않는 초에있는 요소를 반환하지 않습니다.
는 그 같은 경우에 그것을 얻을 : 첫 번째 배열의 모든 요소가 두 번째의 '표시'때문에 제거해야하기 때문에
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array
당신이 빈 상태 (empty)의 배열이.
하지만 왜 우리는 두 번째 배열에 나타나지 않는 다른 모든 항목의 고유 한 인스턴스 만 얻습니까? 이 행동의 근거는 무엇입니까?
에
Set이 같이 설명 버그 또는 의도하지 않은 기능처럼. MSDN 페이지는 별개의 결과가 아니라 ... –
이것은 버그가 아닙니다. 'Except' 메쏘드는 set 연산으로 정의 된 SQL EXCEPT 연산자로 변환되도록되어 있습니다. 집합 연산이므로 고유 한 요소 만 반환됩니다. "뚜렷 함"은 MSDN에서 "용어"를 사용함에 의해 암시됩니다. – Gabe