Пересечение двух множеств - 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();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы