Это довольно неэффективно, и я не знаю ваш тип. Я предполагаю, что это символы, и вы можете заменить их другим типом, если я угадала неправильно.
// keys.ToList() means
List temp = new List();
foreach (char k in keys)
{
temp.Add(k);
}
// .ForEach(k => actions.KeyUp(k)) means (in context of your temporary list)
foreach (char k in temp)
{
actions.KeyUp(k);
}
Таким образом, метод KeyUp вашего объекта действий вызывается один раз для каждого ключа внутри ключей.
Причиной создания этого временного списка является то, что метод ForEach находится в списке, но не IEnumerable. В ответ на вопрос, который, несомненно, вызывает у вас мое предыдущее предложение, см. здесь .
Более эффективным (ЦП / память, время) способом достижения точно такого же результата (за исключением ненужного сбора мусора и задержек) будет
foreach (var k in keys)
{
actions.KeyUp(k);
}
или, если вы предпочитаете его в одной строке: [ 118]
foreach (var k in keys) { actions.KeyUp(k); }
Я недавно использовал AutoMapper , и он отлично работает.
из получения/установки свойств вручную! Имейте Вас, попробовал это: http://dozer.sourceforge.net/.
Гибкая и настраиваемая платформа для перевода боба к бобу. Мог бы помочь!
У меня были инструменты использования успеха как XDoclet (хотя это не должно быть к трудно к сценарию) автоматически генерировать объекты передачи и простые переводы объекта.
Тем не менее, если Вы полагаете, что Ваши переводы Объекта достаточно просты быть сделанными с помощью отражения, существует ли причина, Вы не можете только передать объекты Объекта по проводу вместо DTO? Могло бы быть лучше иметь немного пользовательскую сериализацию, чем полноценный DTO.
используйте ValueInjecter, с ним вы можете сопоставить что угодно с чем угодно, например
object <-> object
object <-> Form/WebForm
DataReader -> object
и у него есть классные возможности, такие как: сглаживание и разглаживание
загрузка содержит много примеров (примеры приложений для asp.net mvc, web-forms, winforms, unit tests)