Пересечение двух множеств - C#
Формулировка задачи:
Доброго времени суток, Господа. Вопрос в следующем. Как мне правильно сделать пересечение друх множеств? Вопросы следующие:
Где Вопрос такой, тут обязательно нужно реализовать но мне мало это что дало. Даже больше скажу...так он перестает правильно сравнивать свойства по имени, как я хотел бы.
1.
Хочу найти пересечение двух последовательностей, которые хранят информацию о свойствах двух классов, по имени этих свойств:PropertyInfo[] sourceProperties = typeSource.GetProperties(); PropertyInfo[] destinationProperties = typeDestination.GetProperties(); var sourceCommonProperies = sourceProperties.Intersect( destinationProperties, propertyComparer );
propertyComparer
- объект класса PropertyComparer, реализованный мной таким образом:
internal class PropertyComparer : IEqualityComparer<PropertyInfo> { public bool Equals( PropertyInfo prop1, PropertyInfo prop2 ) { string prop1Name = prop1.Name.ToUpper(); string prop2Name = prop2.Name.ToUpper(); Type prop1Type = prop1.PropertyType; Type prop2Type = prop2.PropertyType; if( ( string.Compare( prop1Name, prop2Name, true ) == 0 ) && ( prop1Type.Equals( prop2Type ) ) ) return true; return false; } public int GetHashCode( PropertyInfo prop ) { return 0; } }
GetHashCode
, что должно быть в ней написано, если в Equals
ничего не сравнивается по хеш ключу? Не могу понять. Пытался ее реализовать таким образом:
public int GetHashCode( PropertyInfo prop ) { return prop.Name.GetHashCode(); }
2.
Есть ли из коробки метод, который также возвращает пересечение двух последовательностей, но в параметре принимает не объетIEqualityComparer<T>
для сравнения, а предикат? Или придется ручками делать? И нужно ли это? Решение задачи: «Пересечение двух множеств»
textual
Листинг программы
public int GetHashCode( PropertyInfo prop ) { return prop.GetHashCode(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д