2016-11-08 2 views
0

나는 놀라운 것을 발견하고 누군가가 내게 무슨 일이 일어 났는지 설명 할 수 있기를 바랬다. Linq enumerables는 객체에 의해 구현 된 인터페이스를 방해 할 수 있습니다.Linq를 사용할 때 인터페이스가 손실되는 이유는 무엇입니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    interface One 
    { 
     int id {get; set; } 
    } 

    class A : One 
    { 
     public int id {get; set; } 
    } 

    interface Two 
    { 
    } 

    class B : A, Two 
    { 
    } 

    public static void Main() 
    { 
     var list = new List<One>() { new B {id = 1} }; 

     var b1 = list.Where(x => x.id == 1); 
     var b2 = list.First(); 

     Console.WriteLine(b1 is Two); 
     Console.WriteLine(b2 is Two); 
    } 
} 

출력은 다음과 같습니다 :

False 
True 

나는 동일한 개체를 기다리고 있었다가 어디()와 첫 번째()에 의해 반환 된,하지만 분명히 반환 된 객체가 될 다른 유형이 코드를 실행하면 . 누군가가 이것에 대해 밝힐 수 있습니까?

감사합니다! 조건이 List<One> 내의 여러 개체로 One 충족 될 수 있으므로 톰 B.

+7

'Where'는'IEnumerable '을 반환합니다. – zerkms

+0

여기서'IEnumerable '은 여러 결과가 조건을 만족시킬 수 있기 때문에 반환합니다. – mason

+1

var b1 = list.Single (x => x.id == 1); // 콘솔에서 true를 인쇄해야합니다. – Derpy

답변

2

.Where() 오히려 One 단일 개체보다 IEnumerable<One> 반환한다. .First() 메서드는 IEnumerable<One>에서 찾을 수있는 첫 번째 One 개체를 검색합니다.

관련 문제