> 백엔드 개발 > C++ > C#에서 목록을 목록으로 어떻게 캐스팅할 수 있나요?

C#에서 목록을 목록으로 어떻게 캐스팅할 수 있나요?

DDD
풀어 주다: 2025-01-09 22:41:41
원래의
381명이 탐색했습니다.

How Can I Cast a List to a List in C#?

C#에서 파생 클래스 목록을 기본 클래스 목록으로 변환

이 예는 파생 클래스 객체 목록(예: List<Cat>)을 기본 클래스 객체 목록(List<Animal>)을 기대하는 메서드에 전달하는 일반적인 문제를 보여줍니다. 기본 클래스 참조는 파생 클래스 객체를 직접 가리킬 수 없으므로 직접 할당은 허용되지 않습니다.

문제:

List<Cat> 매개변수가 있는 메소드에 List<Animal>를 전달하려고 하면 컴파일러 오류가 발생합니다.

해결책: IEnumerable 및 공분산

사용

이 솔루션은 C#의 일반 공분산을 활용합니다. List<Animal>을 사용하는 대신 메소드 매개변수 유형을 IEnumerable<Animal>으로 변경하세요. IEnumerable은 읽기 전용 인터페이스입니다. 이렇게 하면 메소드가 원본 컬렉션을 수정하는 것을 방지하여 잠재적인 유형 안전 문제를 해결할 수 있습니다.

수정된 코드:

<code class="language-csharp">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals)
    {
        //Implementation
    }
}

class Program
{
    static void Main()
    {
        Cat myCat = new Cat();
        myCat.Play(new List<Cat>()); // This now compiles successfully
    }
}</code>
로그인 후 복사

이는 List<Cat>이 암시적으로 IEnumerable<Cat>로 변환되고 IEnumerable<Cat>IEnumerable<Animal>과 공변적이기 때문에 작동합니다. Play 메서드는 이제 컬렉션을 수정하지 않고도 컬렉션 전체를 안전하게 반복할 수 있습니다. 이 접근 방식은 유연한 메서드 매개변수화를 허용하면서 유형 안전성을 유지합니다.

위 내용은 C#에서 목록을 목록으로 어떻게 캐스팅할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿