Копировать список в другой список, но исключая определенные свойства типа списка

Кажется, это должно быть легко, но я не могу придумать аккуратный способ сделать это.

С классом

class SomeType
{ 
   public int SomeInteger {get;}
   public string SomeString {get;}
   public object SomeObject {get;}
}

Предполагая, что откуда-то извлекается список SomeType, но тогда мне нужно удалить поле SomeString из каждого элемента в списке. Поэтому я перебираю список, создаю анонимный тип и добавляю его в новый список.

List<SomeType> list = GetList();

var newList = new List<dynamic>();
list.ForEach(item => newList.Add(new { SomeInteger = item.SomeInteger, SomeObject = item.SomeObject });

Есть ли лучший способ сделать это, не требующий от меня создания пустого списка динамического типа? Могу ошибаться, но мне кажется, что это не лучший способ сделать это.


person Thomas Wormald    schedule 13.02.2015    source источник
comment
возможный дубликат Как получить тип T из общего списка ‹T›   -  person MethodMan    schedule 14.02.2015


Ответы (2)


Что ж, вы можете создать список анонимных типов напрямую, и он будет строго типизирован:

list.Select(item => new 
                    { 
                        SomeInteger = item.SomeInteger, 
                        SomeObject = item.SomeObject
                    }).ToList();
person Selman Genç    schedule 13.02.2015
comment
Спасибо, я знал, что должен быть способ получше! - person Thomas Wormald; 14.02.2015

Для объявления newList дополнительный оператор не требуется. Компилятор C # может определять тип автоматически. Дополнительные сведения см. В разделе неявно типизированные локальные переменные.

 var newList = GetList()
  .Select(x => new { SomeInteger = x.SomeInteger, SomeObject = x.SomeObject})
  .ToList();
person Richard Schneider    schedule 13.02.2015