2013-06-05 5 views
8

Позволяет сказать:Создать список из другого списка

class Plus5 { 
    Plus5(int i) { 
     i+5; 
    } 
} 
List<int> initialList = [0,1,2,3] 

Как я могу создавать, из initialList, другого списка вызывающего Plus5() конструктор для каждого элемента initialList. Что-то лучше чем?

List<Plus5> newList = new List<Plus5>(); 
initialList.ForEach(i => newList.Add(Plus5(int))); 
+0

да, я строю список Plus5 из первоначального списка Int –

+0

Есть причина, по которой вы хотите иметь тип «Plus5»? Похоже, вы просто хотите создать новый список 'int', где' ints' будет увеличиваться на 5 –

+0

его только для примера –

ответ

8

Используйте LINQ, чтобы добавить 5 к каждому номеру в вашем списке.

var result = initialList.Select(x => x + 5); 
+0

Отлично, я не понял, что Select получил эту мощность. –

+0

Посмотрите на эту ссылку http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b. Это отличное место для обучения LINQ. – arunlalam

12

Как я могу создавать, из initialList, другой список вызова Plus5() конструктора для каждого элемента initialList?

Таким образом, результат List<Plus5> newList и вы хотите создать новый Plus5 для каждого int в initialList:

List<Plus5> newList = initialList.Select(i => new Plus5(i)).ToList(); 

Если вы хотите, чтобы микро-оптимизируют (экономии памяти):

List<Plus5> newList = new List<Plus5>(initialList.Count); 
newList.AddRange(initialList.Select(i => new Plus5(i))); 
+0

Это правильный ответ. Тем не менее, вы можете предложить альтернативное решение, в котором он может создать «Список », так что «ints» будет увеличиваться на 5 :) –

+0

@steaks: Кажется, что roughnex уже разместил этот подход (по крайней мере 'IEnumerable '). Однако это не то, о чем попросил ОП. –

+0

Да, это правильный ответ. Спасибо вам, +5 были только для примера: D –

1

Вы можете использовать LINQ, как указано выше.

var result = initialList.Select(x => x + 5).ToList(); 

Если у вас есть метод (как Plus5), это будет выглядеть так

int Plus5(int i) 
{ 
    return I + 5; 
} 

var result = initialList.Select(Plus5).ToList(); 
1
List<Plus5> result = new List<Plus5>(InitialList.Select(x=>new Plus5(x)).ToList())); 
+0

Это даже не компилируется. Вы пытаетесь построить «Список », передав в «Список » в качестве параметра конструктора. –

Смежные вопросы