【问题标题】:How to copy List to Array如何将列表复制到数组
【发布时间】:2010-12-27 15:51:23
【问题描述】:

我有 Guid 的列表

List<Guid> MyList;

我需要将它的内容复制到数组中

Guid[]

请给我推荐一个漂亮的解决方案

【问题讨论】:

  • 另一个问题,MyClass { Guid value; } List 如何将 Guid 属性复制到 Guid 的数组?我的意思是不使用迭代语句
  • 我不是 100% 了解 SO 礼仪,但最好将新问题作为新问题提出。我可能是错的。

标签: c# arrays list containers


【解决方案1】:

正如Luke 在 cmets 中所说,特定的List&lt;T&gt; 类型已经有一个ToArray() 方法。但如果您使用的是 C# 3.0,则可以在任何 IEnumerable 实例(包括 IListIList&lt;T&gt;、集合、其他数组等)上利用 ToArray() 扩展方法

var myList = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array = myList.ToArray(); // instance method

IList<Guid> myList2 = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array2 = myList2.ToArray(); // extension method

var myList3 = new Collection<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array3 = myList3.ToArray(); // extension method

关于你的第二个问题:

您可以使用Select 方法来执行所需的投影:

var list = new List<MyClass> {new MyClass(), new MyClass()};
Guid[] array = list.Select(mc => mc.value).ToArray();

【讨论】:

  • List&lt;T&gt; 有它自己的(即,不是扩展)ToArray 方法,从 .NET2 开始可用。 (与上面的语法完全相同,尽管如果没有 C#3,您将无法使用 var 或对象初始化器。)
  • @Luke:非常好的观点!我相应地更新了我的答案。谢谢。
【解决方案2】:

您应该只需要调用 MyList.ToArray() 来获取元素数组。

【讨论】:

    【解决方案3】:

    新方法(在 .Net 2.0 中对通用列表使用扩展或 ToArray() 方法):

    Guid[] guidArray = MyList.ToArray();
    

    老办法:

    Guid[] guidArray = new guidArray[MyList.Length];
    int idx = 0;
    foreach (var guid in MyList)
    {
        guidArray[idx++] = guid;
    }
    

    【讨论】:

    • C# 2.0 有List.ToArray,它使用System.Array.Copy
    【解决方案4】:

    除了Guid[] MyArray = MyList.ToArray()之外还有另一个选择:

    Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
    MyList.CopyTo(MyArray, 0);
    

    如果出于某种原因,您已经有一个大小合适的数组并且只是想填充它(而不是像 List&lt;T&gt;.ToArray() 那样构造一个新数组),那么这个解决方案可能会更好。

    【讨论】:

      【解决方案5】:

      使用Enumerable.ToArray() Extension Method 你可以做到:

      var guidArray = MyList.ToArray();
      

      如果您仍在使用 C# 2.0,则可以使用 List.ToArray 方法。语法相同(除了 C# 2.0 中没有 var 关键字)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多