Пересечение двух множеств - 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д