我有Guid的列表
List<Guid> MyList;
我需要将其内容复制到Array
Guid[]
请推荐一个漂亮的解决方案
答案 0 :(得分:22)
正如Luke在评论中所说,特定List<T>
类型已经有ToArray()
方法。但是,如果您使用的是C#3.0,则可以在任何IEnumerable
实例上使用ToArray()
扩展方法(包括IList
,IList<T>
,集合,其他数组等。 )
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();
答案 1 :(得分:10)
你应该只需要调用MyList.ToArray()来获取元素数组。
答案 2 :(得分:5)
新方法(在.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;
}
答案 3 :(得分:4)
除了Guid[] MyArray = MyList.ToArray()
之外,还有另一种选择:
Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
MyList.CopyTo(MyArray, 0);
如果由于某种原因,您已经拥有一个大小合适的数组并且只想填充它(而不是像List<T>.ToArray()
那样构造一个新的那个),那么这个解决方案可能会更好。
答案 4 :(得分:3)
使用Enumerable.ToArray() Extension Method即可:
var guidArray = MyList.ToArray();
如果您仍在使用C#2.0,则可以使用List.ToArray方法。语法是相同的(除了C#2.0中没有var
个关键字)。