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>(); // 编译错误 } }
. 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:
List<A> listOfA = new List<C>().ConvertAll(x => (A)x);
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!