gpt4 book ai didi

c# - 从 List 继承的类型不能分配给 List

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:30 24 4
gpt4 key购买 nike

例子:

        public class ListInheritanceTest
{
public void Test1()
{
List<string> list = new List<string>();
MyList myList = list;
}
}
public class MyList : List<string>
{
}

但是MyList myList = list有错误“无法将类型‘System.Collections.Generic.List’隐式转换为‘ConsoleTest.MyList’”

我该如何解决这个问题?谢谢。

----编辑----
我不是在问为什么会报错。我想知道使分配工作的解决方法是什么。上面的代码只是一个简化的例子。目的是转换所有List<SomeType>到我的代码中的 MyList 而不会引入任何向后不兼容。

--- 第二次编辑 ----

让我改一下问题。假设我在上面的代码中以相同的方式定义了 MyList。 分配 List<string> 的最简单方法是什么?到我的列表。

我知道

            foreach(var item in list)  
mylist.Add(item)

总是工作。只是在寻找更优雅的东西。

最佳答案

How can I fix this?

改变你的设计。你不能沮丧 - a MyList List<string>但反之则不然。您可以通过重新使用 List<T> 将项目复制到新列表中接受任何 IEnumerable<T> 的复制构造函数(其中包括一个 List<string> ):

public class ListInheritanceTest
{
public void Test1()
{
List<string> list = new List<string>();
MyList myList = new MyList(list); // copy the items in the list
}
}
public class MyList : List<string>
{
public MyList(IEnumerable<string> list) : base(list) {} // reuse the List<T> copy constructor
}

The purpose is to convert all List to MyList in the code without introducing any backward incompatibility.

同样,你不能。 List不是 MyList .您能做的最好的事情就是转换 List 为MyList通过使用复制构造函数或其他一些方法。

What's the easiest way to assign a List<string> to MyList.

不能List<string> 不一定 MyList .以与 Cat 相同的方式不是 Tiger .可能是,但您不能只是类型转换 is 并将其视为它。

请注意,如果您创建列表为 MyList (例如 List<T> newList = new MyList() )然后你可以安全地转换它。事实上,您可以在其他任何地方使用它,就好像它是一个 List<string> (因为它是!)但是你不能安全地转换任意 List<string>MyList .期间。

关于c# - 从 List<T> 继承的类型不能分配给 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18004950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com