Как Вы улучшили бы этот мелкий класс копирования?

Получить все расширения из выпадающего списка:

 var extensions = comboFileTypes.Items.Cast<string>().Select(x => "." + x);

Поиск без учета регистра путем перечисления всех файлов в каталоге:

var files = Directory.EnumerateFiles(sourceDIR.Text, "*.*", SearchOption.AllDirectories).Where(x => extensions.Any(y => y.Equals(Path.GetExtension(x), StringComparison.OrdinalIgnoreCase)));

В качестве альтернативы вы можете искать только указанные расширения:

 var files = extensions.AsParallel().SelectMany(x => Directory.EnumerateFiles(sourceDIR.Text, "*" + x, SearchOption.AllDirectories));
5
задан Neil Barnwell 22 January 2009 в 17:04
поделиться

4 ответа

Действительно ли Ваши DTOs являются сериализуемыми? Я ожидал бы так, в этом случае:

MemberInfo[] sm = FormatterServices.GetSerializableMembers(typeof(From));
object[] data = FormatterServices.GetObjectData(from, sm);
FormatterServices.PopulateObjectMembers(to, sm, data);

Но обратите внимание, что я действительно не соглашаюсь с этим общим подходом. Я предпочел бы сильный контракт для копирования на Вашем DTOs, который реализует каждый DTO.

6
ответ дан 18 December 2019 в 14:52
поделиться

Новый метод, который создал новый экземпляр To и названный Copy() метод перед возвратом мог бы быть полезным.

Как это:

public static To Create<From, To>(From from)
    where To : class, new()
    where From : class
{
    var to = new To();
    Copy(from, to);
    return to;
}
2
ответ дан 18 December 2019 в 14:52
поделиться
  • Измените свои названия параметра типа для исполнения соглашений о присвоении имен, например, TFrom и TTo, или TSource и TDest (или TDestination).

  • Сделайте большую часть своей работы в универсальном типе вместо в просто общем методе. Это позволяет Вам кэшировать свойства, а также позволяющий вывод типа. Вывод типа важен на параметре "TFrom", поскольку он позволит анонимным типам использоваться.

  • Вы могли потенциально сделать его ослепляюще быстро путем динамичного генерирования кода, чтобы сделать копирование свойства и хранение его в делегате, который допустим для "от" типа. Или потенциально генерируйте его в течение каждого из/в пару, которая означала бы, что фактическое копирование не должно будет использовать отражение вообще! (Подготовка кода была бы одноразовым хитом на пару типов, но надо надеяться у Вас не будет слишком многих пар.)

4
ответ дан 18 December 2019 в 14:52
поделиться

Решите то, что Вы хотите сделать, если переданные объекты типов, которые совместно используют некоторые свойства, но не все. Проверьте на существование свойства в From объект в To объект прежде, чем попытаться установить это - значение. Сделайте "правильную вещь", когда Вы приходите к свойству, которое не существует. Если все общественные собственности должны быть идентичными, то необходимо будет проверить, установили ли Вы всех их на To возразите и обработайте случай, где Вы не имеете соответственно.

Я также предположил бы, что можно хотеть использовать атрибуты для украшения свойств, которые должны быть скопированы и проигнорировать других. Это позволило бы Вам идти назад и вперед между двумя различными объектами более легко и продолжать поддерживать некоторые общественные собственности, которые получены, а не сохранены на Вашем бизнес-объекте.

1
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: