У меня есть цикл foreach, читающий список объектов одного типа и создающий список объектов другого типа. Мне сказали, что лямбда-выражение может достичь того же результата.
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
Любая помощь будет оценена - я новичок в лямбда и Линк спасибо, с
Ответы:
Попробуйте следующее
Это использует комбинацию Lambdas и LINQ для достижения решения. Функция Select - это метод стиля проекции, который будет применять переданный делегат (или лямбду в данном случае) к каждому значению в исходной коллекции. Результат будет возвращен в новом
IEnumerable<TargetType>
. Вызов .ToList является методом расширения, который преобразует егоIEnumerable<TargetType>
вList<TargetType>
.источник
TargetType
? Я закончил с чем-то вроде этого:List<ISearchEntity> results = myIQueryable.Select(x => (ISearchEntity) new TargetType { MyField = "Field value is " + x.TargetField }).ToList();
где цель состояла в том, чтобы получить объект типаList<ISearchEntity>
Если вы знаете, что хотите конвертировать из
List<T1>
в,List<T2>
тоList<T>.ConvertAll
это будет немного более эффективно, чемSelect
/,ToList
потому что он знает точный размер для начала:В более общем случае, когда вы знаете только об источнике как о
IEnumerable<T>
, использованиеSelect
/ToList
- это путь. Вы могли бы также утверждать , что в мире с помощью LINQ, это более идиоматических начать с ... но это стоит , по крайней мере осознаваяConvertAll
вариант.источник
IEnumerable<T>
тогда, просто позвонитеSelect
иToList
в соответствии с ответом Джареда.x => buildTargetType(x)
источник
cannot cast expression
исключениеисточник
Я считаю, что-то вроде этого должно работать:
источник
.ToList()
в конце, иначе это просто предоставит IEnumerable.Вот простой пример ..
источник
источник
Предположим, у вас есть несколько свойств, которые вы хотите преобразовать.
источник
Или с
constructor
&linq
сSelect
:Linq
Линия более мягкий! ;-)источник
Если вам нужно использовать функцию для приведения:
Где моя пользовательская функция:
источник
для класса схожего типа.
List<targetlist> targetlst= JsonConvert.DeserializeObject<List<targetlist>>(JsonConvert.SerializeObject(<List<baselist>));
источник
Если типы можно напрямую приводить, это самый чистый способ сделать это:
Если типы не могут быть напрямую приведены, то вы можете сопоставить свойства из оригинального типа целевому типу.
источник
Мы рассмотрим первый тип списка как String и хотим преобразовать его в тип списка типа Integer.
Добавьте значения в исходный список.
Создать целевой список целочисленных типов
Вывод списка значений с использованием forEach:
источник