Не получается заставить работать .Union (объединение двух массивов вместе, исключая дубликаты) - PullRequest
1 голос
/ 30 марта 2010

Я хочу объединить два массива, исключая дубликаты. Я использую пользовательский класс:

public class ArcContact : IEquatable<ArcContact>
{
    public String Text;

    public Boolean Equals(ArcContact other)
    {
        if (Object.ReferenceEquals(other, null)) return false;
        if (Object.ReferenceEquals(this, other)) return true;
        return Text.Equals(other.Text);
    }
    public override Int32 GetHashCode()
    {
        return Text == null ? 0 : Text.GetHashCode();
    }
}

Я реализовал и необходимый интерфейс IEquatable, как упомянуто в этом разделе MSDN . Я только хочу проверить свойство Text класса ArcContact и убедиться, что массив ArcContact имеет уникальный текст.

Здесь я вставил код, который я использую, как вы видите, у меня есть метод с двумя параметрами, массивами для объединения и ниже того кода, который я получил из предыдущего раздела msdn.

internal static class ArcBizz
{
    internal static ArcContact[] MergeDuplicateContacts(ArcContact[] contacts1, ArcContact[] contacts2)
    {
        return (ArcContact[])contacts1.Union(contacts2);
    }
    internal static IEnumerable<T> Union<T>(this IEnumerable<T> a, IEnumerable<T> b);
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Я предполагаю, что вы получите InvalidCastException из-за:

return (ArcContact[])contacts1.Union(contacts2);

должно быть

return contacts1.Union(contacts2).ToArray();

Кроме того, я не уверен, что в вашем коде делается следующее:

internal static IEnumerable<T> Union<T>(this IEnumerable<T> a, IEnumerable<T> b);
1 голос
/ 30 марта 2010

Результат объединения - это не массив, а IEnumerable. Вы должны использовать метод расширения ToArray:

return contacts1.Union(contacts2).ToArray();
...