У меня есть список Гуида
List<Guid> MyList;
Я должен скопировать его содержание для Выстраивания
Guid[]
Рекомендуйте мне симпатичное решение
Как Люк сказал в комментариях, конкретный тип List
уже имеет метод 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
Относительно вашего второго вопроса:
Вы можете использовать метод Select
для выполнения необходимой проекции:
var list = new List<MyClass> {new MyClass(), new MyClass()};
Guid[] array = list.Select(mc => mc.value).ToArray();
Вам просто нужно вызвать MyList.ToArray (), чтобы получить массив элементов.
Использование Enumerable.ToArray () Метод расширения , вы можете:
var guidArray = MyList.ToArray();
Если вы все еще используете C # 2.0, вы можете использовать метод List.ToArray . Синтаксис тот же (за исключением того, что в C # 2.0 нет ключевого слова var
).
Новый способ (с использованием расширений или метода ToArray () в общих списках в .Net 2.0):
Guid[] guidArray = MyList.ToArray();
Старый способ:
Guid[] guidArray = new guidArray[MyList.Length];
int idx = 0;
foreach (var guid in MyList)
{
guidArray[idx++] = guid;
}
Еще один вариант в дополнение к Guid [] MyArray = MyList.ToArray ()
:
Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
MyList.CopyTo(MyArray, 0);
Это решение может быть лучше, если по какой-либо причине вы уже имеете массив правильного размера и просто хотите заполнить его (а не создавать новый, как это делает List
).