У меня есть несколько простых классов с кучей простых свойств (простые объявления {get; set;}
). Все свойства обнуляются (или, что эквивалентно, ссылочные типы).
Например:
class POCO
{
int? Field1 { get; set; }
string Field2 { get; set; }
... etc ...
}
У меня есть сценарий, в котором я строю эти POCO по частям, и в конце я хотел бы получить один из них со всеми ненулевыми полями.
Некоторый иллюстративный код:
POCO o1 = LoadFields1To3();
POCO o2 = LoadFields4To5();
POCO o3 = LoadFields6To9();
... etc ...
Мы находимся в этом сценарии, потому что некоторые поля загружаются из SQL (а иногда и из разных запросов), а некоторые загружаются из структур данных памяти. Я повторно использую тип POCO здесь, чтобы избежать множества бессмысленных в других отношениях классов (статический тип весьма полезен для Dapper и вообще в целом).
То, что я ищу, это хороший способ объединить свойства этих объектов в один со свойствами, не равными NULL.
Что-то вроде:
POCO final = o1.UnionProperties(o2).UnionProperties(o3) // and so on
Я могу гарантировать, что ни одно поле не является ненулевым для более чем одного объекта. Хотя я бы предположил, что решение заняло бы самое левое ненулевое поле, на самом деле в этом нет необходимости.
Я знаю, что могу написать некоторый код для отражения, но это немного неприятно и медленно.
Это должно быть применимо в общем случае, так как, хотя я никогда не собираюсь объединять объекты разных типов, существует очень большое количество типов, к которым этот метод применим.
Мне было интересно, нет ли более умного способа, возможно ab с использованием динамического?