Я не могу сказать, что мне нужно это очень часто - Вы могли предоставить больше подробную информацию относительно того, почему Вы хотите это? Я, вероятно, поместил его как статический метод в классе помощника:
public static class Lists
{
public static List<T> RepeatedDefault<T>(int count)
{
return Repeated(default(T), count);
}
public static List<T> Repeated<T>(T value, int count)
{
List<T> ret = new List<T>(count);
ret.AddRange(Enumerable.Repeat(value, count));
return ret;
}
}
Вы могли использование Enumerable.Repeat(default(T), count).ToList()
, но это будет неэффективно должное буферизовать изменение размеров.
РЕДАКТИРОВАНИЕ: Как отмечено в комментариях, Вы могли заставить Repeated
использовать цикл для заполнения списка, если бы Вы хотели. Это было бы немного быстрее также. Лично я нахожу код с помощью Repeat
более описательный, и подозреваю, что в реальном мире различие в производительности было бы не важно, но пробег может варьироваться.
Вы, кажется, подчеркиваете потребность в позиционной связи с Вашими данными, таким образом, разве ассоциативный массив больше не соответствовал бы?
Dictionary<int, string> foo = new Dictionary<int, string>();
foo[2] = "string";
string [] temp = new string[] {"1","2","3"};
List<string> temp2 = temp.ToList();
Инициализация содержания списка как этот не действительно, для чего списки. Списки разработаны для содержания объектов. Если Вы хотите отобразить конкретные числа на конкретные объекты, рассмотрите использование структуры пары "ключ-значение" как хэш-таблица или словарь вместо списка.
Почему Вы используете Список, если Вы хотите инициализировать его с фиксированным значением? Я могу понять, что - ради производительности - Вы хотите дать ему начальную способность, но не одно из преимуществ списка по эквидистантной антенной решетке, которую это может вырастить при необходимости?
, Когда Вы делаете это:
List<int> = new List<int>(100);
Вы создаете список, способность которого является 100 целыми числами. Это означает, что Ваш Список не должен будет 'расти', пока Вы не добавите 101-й объект. Основной массив списка будет инициализирован с длиной 100.
Используйте конструктора, который берет интервал ("качество") аргумента:
List<string> = new List<string>(10);
РЕДАКТИРОВАНИЕ: Я должен добавить, что соглашаюсь с Frederik. Вы используете Список способом, который идет вразрез со всем обоснованием позади использования его во-первых.
EDIT2:
РЕДАКТИРОВАНИЕ 2: То, что я в настоящее время пишу, является базовым классом, предлагающим функциональность по умолчанию как часть большей платформы. В функциональности по умолчанию я предлагаю, размер Списка известен в усовершенствованном, и поэтому я, возможно, использовал массив. Однако я хочу предложить любому базовому классу шанс динамично расширить его, и поэтому я выбираю список.
, Почему кто-либо должен был бы знать размер Списка со всеми нулевыми значениями? Если бы нет никаких действительных значений в списке, я ожидал бы, что длина будет 0. Во всяком случае то, что это - cludgy, демонстрирует, что он идет вразрез с надлежащим использованием класса.
List<string> L = new List<string> ( new string[10] );
Если Вы хотите инициализировать список с элементами N некоторого фиксированного значения:
public List<T> InitList<T>(int count, T initValue)
{
return Enumerable.Repeat(initValue, count).ToList();
}