0
이 변환 유형을 허용하지 않는 이유를 알고 싶습니다. 이 post in SO에서 주제가 이미 다뤄졌지만 이것이 왜 자연적으로 가능하지 않은지에 대한 낮은 수준의 설명을 원합니다.C#에서 개체에 익명 캐스트를 허용하지 않는 이유는 무엇입니까?
왜 이러한 캐스트가 실패합니까?
OBS : 리플렉션을 통해 가능하다는 사실을 알고 있습니다. anonymous
이 성공적으로 IList<People>
또는 List<People>
에 캐스트 할 수없는 이유
IList<People> peopleList = new List<People>()
{
new People() { Name = "Again", Age = 10 },
new People() { Name = "Over", Age = 20 },
new People() { Name = "Jonh", Age = 30 },
new People() { Name = "Enzo", Age = 40 },
};
var anonymous = (from p in peopleList
select new
{
Name = p.Name,
Age = p.Age
});
// Does not work
IList<People> listt = (IList<People>)anonymous;
//Does not Work
IList<People> listt = (anonymous as List<People>);
나는 그것이 * 작동해야한다고 생각하는 것이 흥미로울 것 같다. 익명 형식은 필드가 같더라도 다른 형식이 아닙니다. 동일한 다른 유형, 익명 또는 아닙니다 간다. 그것이 언어가 구축 된 방법입니다. C#에서는 오리 타입이 없습니다. – nvoigt
왜 작동해야합니까? 그것은 익명의 타입이지,'People' 인스턴스가 아닙니다. 하나에서 다른 것으로 상상할 수있는 캐스트가 없습니다. 캐스트는 "이 객체를 다른 동등한 유형처럼 취급합니다"를 의미합니다. 이 익명 유형이'People'과 동일하다는 것은 아무것도 없습니다. 애완 동물을 대표하는 데 사용한다면 어떨까요? –
'개'에게 '사람'을 캐스팅 할 수 있습니까? 둘 다 이름과 다리가 있습니다. 왜 캐스트가 작동하지 않습니까? –