似乎无法获得.Union工作(合并2个数组,排除重复)

时间:2010-03-30 08:00:13

标签: c# arrays static union equals

我想组合两个数组,不包括重复数组。我正在使用自定义类:

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();
    }
}

我实现了这个msdn section中提到的IEquatable接口。我只想检查ArcContact类的Text属性,并确保ArcContact数组具有唯一的Text。

在这里我粘贴了我使用的代码,你可以看到我有两个参数的方法,数组要结合,下面是我从上面提到的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 个答案:

答案 0 :(得分:1)

Union的结果不是数组,它是IEnumerable。 您必须使用ToArray扩展方法:

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

答案 1 :(得分:1)

我认为你得到一个InvalidCastException,因为:

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

应该是

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

另外,我不确定您的代码中有以下内容:

internal static IEnumerable<T> Union<T>(this IEnumerable<T> a, IEnumerable<T> b);