캐스트 목록<콘크리트형> to List
다음 코드를 고려하세요.
public interface IDic { int Id { get; set; } string Name { get; set; } } public class Client : IDic { } List<Client> clients = new List<Client>();
많은 프로그래머는 이 List
List<IDic> dics = (List<IDic>)clients;
그러나 이는 유효한 캐스트가 아닙니다. 이러한 유형의 캐스트는 유형 안전을 위반하므로 허용되지 않습니다. 이 캐스트를 시도하면 다음 오류가 발생합니다.
Cannot convert type 'System.Collections.Generic.List<Client>' to 'System.Collections.Generic.List<IDic>'
왜 이 캐스트가 허용되지 않습니까?
이 캐스트가 허용되지 않는 이유는 안전하지 않은 행동의 가능성. 예를 들어 다음 시나리오를 생각해 보세요.
public interface IFruit {} public class Apple : IFruit {} public class Banana : IFruit {} ... List<Apple> apples = new List<Apple>(); List<IFruit> fruit = (List<IFruit>)apples; // Assumed cast fruit.Add(new Banana()); // Eek - it's a banana! Apple apple = apples[0];
이 예에서 List
안전한 변환 옵션
List
List<IFruit> fruit = apples.ToList<IFruit>();
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
이러한 변환으로 인해 새 목록이 생성된다는 점에 유의하는 것이 중요합니다. 한 목록에 대한 변경 사항은 다른 목록에 반영되지 않습니다. 그러나 목록의 개체에 대한 변경 사항은 두 목록 모두에 표시됩니다.
위 내용은 C#에서 `List`를 `List`로 직접 캐스팅할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!