如何在C#中将一个数组转换成List<object>?

94
我该如何在C#中将一个Array转换为List<object>

14
这个问题哪里出了问题我不明白。负五分?真的吗? - Filip Ekberg
6
+1是因为这是一个简单而有效的问题,在SO上我没有找到重复的内容。(投反对票的人应该发表评论或重新考虑。)https://dev59.com/9nNA5IYBdhLWcg3wVcP6 http://blog.stackoverflow.com/2009/06/podcast-58/ (注:SO指的是Stack Overflow,Turtle是一种编程语言Logo中的图形绘制工具) - JYelton
可能是将System.Array转换为List的重复问题。 - Jim Fell
12个回答

118
List<object> list = myArray.Cast<Object>().ToList();

如果数组元素的类型是引用类型,那么由于C#4添加了接口协变,你可以省略.Cast<object>(),例如可以将IEnumerable<SomeClass>视为IEnumerable<object>

List<object> list = myArray.ToList<object>();

35
请确保您正在使用System.Linq。 - Nestor Ledon
这只能在VS2015中工作吗?在VS2012下:“System.Array”不包含“Cast”的定义,也不存在接受类型为“System.Array”的第一个参数的扩展方法“Cast”(您是否缺少使用指令或程序集引用?) - ajeh
感谢您使用 List<object> list = myArray.ToList<object>(); - samir105

48
使用构造函数:new List<object>(myArray)

3
这种风格的好处在于它创建并返回了列表,因此您可以附加更多方法(例如.Contains(userName))。非常适合将大量逻辑压缩成单行if语句 :)。 - Patrick

14

List<object>.AddRange(object[])应该能够解决问题。这样可以避免各种无用的内存分配。 你也可以使用Linq,类似于这样:object[].Cast<object>().ToList()


这种方法的好处是你不需要不断地分配新的 List<T> - 你可以使用 Clear() 方法重用现有的列表。 - Engineer

10

List<> 的构造函数可以接受任何实现了 IEnumerable 接口的对象,因此...

        object[] testArray = new object[] { "blah", "blah2" };
        List<object> testList = new List<object>(testArray);

5
private List<object> ConvertArrayToList(object[] array)
{
  List<object> list = new List<object>();

  foreach(object obj in array)
    list.add(obj);

  return list;
}

3
如果数组元素和列表项相同。
List<object> list=myArray.ToList();

我不得不添加 using System.Linq; 才能使它工作,不确定为什么。 - user3752281

2
你可以尝试这个,
using System.Linq;
string[] arrString = { "A", "B", "C"};
List<string> listofString = arrString.OfType<string>().ToList();

希望这段代码对你有帮助。

2

大家所说的一切都是正确的,因此,

int[] aArray = {1,2,3};
List<int> list = aArray.OfType<int> ().ToList();

这将把aArray转换为列表list。然而,很多评论中最重要的缺失是你需要在类的顶部添加这两个using语句。

using System.Collections.Generic;
using System.Linq;

我希望这能有所帮助!

1

您也可以直接使用数组初始化列表:

List<int> mylist= new List<int>(new int[]{6, 1, -5, 4, -2, -3, 9});

0

这是我的版本:

  List<object> list = new List<object>(new object[]{ "test", 0, "hello", 1, "world" });

  foreach(var x in list)
  {
      Console.WriteLine("x: {0}", x);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接