Пересечение двух листов с разными объектами внутри
Всем привет.
Есть 2 коллекции:
List<string>(keys) и PropertyInfo[](properties). Нужно найти пересечение properties.Name с keys.
Задача, которую решаю:
Получаю из INI-файла List<string>(keys) по указанной секции. Дальше из указанного дженерика получаю свойства, проверяю, какие keys совпадают с названиями свойств из properties, создаю экземпляр класса, вставляю данные из ini-файла в свойства и возвращаю из метода созданный класс.
Написанный код:
public T GetEntitiesBySection<T>(string section)
{
var keys = GetKeys(section);
var instance = Activator.CreateInstance(typeof(T));
var properties = typeof(T).GetProperties().Where(prop => prop.CanRead && prop.CanWrite);
foreach (var prop in properties) //вот здесь уже должны быть только те свойства, имена которых совпадают с keys
prop.SetValue(instance, Read(section, prop.Name));
return (T)instance;
}
Я помню про существование Intersect, но не могу понять, как работать с данный методом, когда внутри листов разные объекты. Конечно, можно сделать, properties.Select(x => x.Name).Intersect(keys), но это вернёт string, а мне нужно PropertyInfo.
Конечно, можно с лёгкостью перебрать всё через цикл foreach и проблема решится, но хочется через linq
Ответы (1 шт):
Тут не надо пересечения, достаточно просто фильтрации
properties = properties.Where(p=>keys.Contains(p.Name)); ?