Cap*_*mic 7 c# arrays containers list
我有Guid的名单
List<Guid> MyList;
Run Code Online (Sandbox Code Playgroud)
我需要将其内容复制到Array
Guid[]
Run Code Online (Sandbox Code Playgroud)
请推荐一个漂亮的解决方案
Rom*_*ier 22
正如卢克在评论中所说,特定List<T>
类型已经有了一种ToArray()
方法.但是,如果你正在使用C#3.0,你可以利用ToArray()
任何扩展方法IEnumerable
实例(包括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
Run Code Online (Sandbox Code Playgroud)
关于你的第二个问题:
您可以使用该Select
方法执行所需的投影:
var list = new List<MyClass> {new MyClass(), new MyClass()};
Guid[] array = list.Select(mc => mc.value).ToArray();
Run Code Online (Sandbox Code Playgroud)
新方法(在.Net 2.0中使用通用列表上的扩展或ToArray()方法):
Guid[] guidArray = MyList.ToArray();
Run Code Online (Sandbox Code Playgroud)
旧方式:
Guid[] guidArray = new guidArray[MyList.Length];
int idx = 0;
foreach (var guid in MyList)
{
guidArray[idx++] = guid;
}
Run Code Online (Sandbox Code Playgroud)
除了Guid[] MyArray = MyList.ToArray()
:
Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
MyList.CopyTo(MyArray, 0);
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,您已经有一个适当大小的数组并只是想填充它(而不是像构造一个新数组一样),则此解决方案可能会更好List<T>.ToArray()
。