Home >Backend Development >C++ >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
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<基类>
<.> 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!