는 내가 가진 :IDictionary, 사전
이IDictionary<string, IDictionary<string, IList<long>>> OldDic1;
(단지 설명을 위해, 그것은 인스턴스화 값을 가지고있다 - 다른 곳)
가 왜이 작업을 수행 할 수 있습니다 :
Dictionary<string, IDictionary<string, IList<long>>> dic1 =
OldDic1 as Dictionary<string, IDictionary<string, IList<long>>>;
기본적으로이 줄을 실행 한 후 dic1은 OldDic1의 모든 값을가집니다. 공장.
그러나 나는이 작업을 수행 할 때
Dictionary<string, Dictionary<string, List<long>>> dic1 =
OldDic1 as Dictionary<string, Dictionary<string, List<long>>>;
내가 널 얻을, 그것은 충돌하지 않는 그것을 제외 캐스팅과 동일하며 대신이 null를 돌려줍니다. 그래서 문제가 인터페이스에서 유형으로 변환 할 수없는 이유는 무엇입니까? 거기에 해결책이 있습니까? 그리고 다른 방법으로 그것이 처음에 저장되는 방식을 바꾸는 것입니까?
캐스팅은 다소 혼란 스럽습니다. 이런 종류의 캐스트를 수행 할 때 (또는 "as"를 사용하는 경우) 기본적으로 저장소에서 객체가 실제로 지정된 유형인지 여부 만 확인하면됩니다. 그 유형을 가진 새로운 객체를 만들지 않고 있습니다. 그냥 확인하는 것입니다. 확실하지 않은 경우 http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –
감사합니다. 훌륭한 기사입니다. – ra170