Home >Backend Development >C++ >Why Can't I Assign a List to a List in C#?

Why Can't I Assign a List to a List in C#?

Susan Sarandon
Susan SarandonOriginal
2025-02-01 17:51:12711browse

Why Can't I Assign a List to a List in C#?

C# In object -oriented programming, the derived class inheritance is very common. However, when processing the set (such as a list), why it is not possible to use the same base class to declare them, which may be confusing.

Consider the following code:

This code will cause compilation errors when trying to use
<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>

. Although the instance of the derived class C can be assigned to the base class variable A, the collection is not good. List<C> List<A> The reason for this limit lies in the method of the C# initialization list. When creating , C# will generate the internal data structure of the list when running, and it is expected that the storage type is an object of A. However, because C is a derivative class of A, its object has additional members and occupies more memory than A object. Therefore, assigning to

will cause the memory address to be dislocated, which may cause memory errors.

List<A> In order to solve this problem and change List<C> as List<A>, you can use the following methods:

<.> 1. Expressing conversion: List<派生类> List<基类>

traversing the list and explicitly converting each element into a base class:

<.> 2. Linq:

Use linq to convert the element as follows:
<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>

These methods allow safe conversion and memory address alignment to ensure the normal operation of the list.

The above is the detailed content of Why Can't I Assign a List to a List in C#?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn