【问题标题】:Convert IList to array in C#在 C# 中将 IList 转换为数组
【发布时间】:2012-03-19 09:41:58
【问题描述】:

我想将 IList 转换为数组: 请看我的代码:

IList list = new ArrayList();
list.Add(1);
Array array = new Array[list.Count];
list.CopyTo(array, 0);

为什么我得到 System.InvalidCastException : 源数组中的至少一个元素无法转换为目标数组类型?假设我不能使用 ArrayList 作为 list 变量的类型,如何解决这个问题?

更新 1:我使用 .NET 1.1。所以我不能使用泛型、Linq 等。我只想接收最常见情况的结果 - 以整数为例,我需要此代码适用于所有类型,所以我在这里使用 Array (也许我对使用 Array 有误,但我需要,再一次,常见的情况)。

【问题讨论】:

  • ArrayList 已过时。请改用List<T>
  • 您使用的是 .NET 2.0 吗?如果你不是,那么使用泛型集合这一切都会变得简单得多。
  • 什么版本的 .NET? System.Linq 增加了一个很棒的功能ToArray()

标签: c# arrays ilist .net


【解决方案1】:

您正在创建一个 Array 值的数组。 1 是int,而不是Array。你应该有:

IList list = new ArrayList();
list.Add(1);
Array array = new int[list.Count];
list.CopyTo(array, 0);

或者,理想情况下,不要使用非泛型类型开头...使用 List 而不是 ArrayListIList<T> 而不是 IList 等。

编辑:请注意,第三行很容易是:

Array array = new object[list.Count];

改为。

【讨论】:

  • 不错的收获!我以为他在 Array 对象上使用了构造函数。
  • @Jon 不知道数组中元素的类型怎么办?整数只是示例 - 我需要更通用的方法(没有泛型)
  • @MichaelZ:你可以改用object[]
【解决方案2】:

您可以使用 Cast 和 ToArray:

Array array = list.Cast<int>().ToArray();

【讨论】:

    【解决方案3】:

    我很惊讶

     Array array = new Array[list.Count];
    

    甚至可以编译,但它不会做你想做的事。使用

     object[] array = new object[list.Count];
    

    并且,标准备注:如果您可以使用 C#3 或更高版本,请尽可能避免使用 ArrayList。 List&lt;int&gt; 可能会让你更开心

    【讨论】:

    • 它可以编译,因为它是一个数组数组。
    【解决方案4】:

    可能最紧凑的解决方案是这样的:

    Enumerable.Range(0, list.Count).Select(i =&gt; list[i]).ToArray();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多