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
Release: 2025-02-01 17:51:12
Original
763 people have browsed it

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
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>(); // 编译错误
    }
}
Copy after login

. 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:
List<A> listOfA = new List<C>().ConvertAll(x => (A)x);
Copy after login

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 of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template