2009-04-30 3 views
0

Why does a Linq Cast<T> operation fail when I have an implicit cast defined?암시 적 연산자, Linq 및 람다 식은 코드를 읽기 쉽게 만들 수 있습니다. 그러나 더 읽기 쉬운 것은 무엇입니까? 이 질문에 대답에서

나는 여러 가지 방법으로 암시 적 객체 사이의 캐스팅이 있다는 것을 발견했다.

는 다음과 같은 두 가지 클래스를 고려

public class Class1 
{ 
    public int Test1; 
} 
public class Class2 
{ 
    public int Test2; 
    public static implicit operator Class1(Class2 item) 
    { 
     return new Class1 { Test1 = item.Test2 }; 
    } 
} 

우리는 다음 중 하나를 수행 할 수 있습니다 목록에 목록을 변환하기 위해서 :

List<Class2> items = new List<Class2> { new Class2 { Test2 = 9 } }; 

foreach (Class1 item in items) 
{ 
    Console.WriteLine(item.Test1); 
} 

foreach (Class1 item in items.ConvertAll<Class1>(i=>i)) 
{ 
    Console.WriteLine(item.Test1); 
} 

foreach (Class1 item in items.Select<Class2, Class1>(i=> i)) 
{ 
    Console.WriteLine(item.Test1); 
} 

foreach (Class1 item in items.Select(i=>i)) 
{ 
    Console.WriteLine(item.Test1); 
} 

을하지만 이는 명확를 읽고 무엇을 이해하기 계속 하시겠습니까?

답변

2

첫 번째 자연 스럽습니다. 함축적 인 던지기의 요점은 두 유형이 충분히 유사하여 개념적 의미를 동일하게 생각한다는 것입니다.

실례합니다.

List<byte> items = new List<byte> { 1, 2, 3, 4 }; 

foreach (int i in items) // since bytes implictly cast to ints 
{ 
    Console.WriteLine(i + 1000); 
} 

위의 질문에 첫 번째 공식이 마음에 들지 않는다면 대신 명시 적 캐스트를 사용해야합니다.

+0

예. 하지만 foreach 루프가 아닌 경우 List 을 전달해야하고 List 전체를 가지고 있어야합니다. 전환 유형이 필요합니다. 위의 코드는 모두이 기능을 제공하지만 더 쉽습니다. –