LinkedList通用输入

时间:2018-04-15 19:43:02

标签: c# generics linked-list

我写了下面的方法:

// Merge two ArrayLists to the first one without duplication
public static void mergeIntoFirst(ArrayList array1, ArrayList array2)
{
    if(array1==null | array2==null)
        throw new ArgumentNullException();

    if (array1 == array2)
        return; //if they are pointing to the same array, then we can exit.

    foreach (object obj in array2)
    {
        if (!array1.Contains(obj))
            array1.Add(obj);
    }
}

但是现在我想改变我的程序以使用linkedList insted, 因为据我所知,arraylist与linq不能很好地合作......

但我需要输入为generc,并且使用所有链表类型,就像这里ArrayList可以包含所有类型的对象一样。 (我在我的代码中使用此方法两次,一次使用用户数组,另一次使用用户发送的消息数组)

我认为使用LinkedList<object>会解决它,因为任何东西都是对象(exept int,chat double itc)

但是在运行时会抛出一个强制执行... 那我该怎么办? 谢谢!

1 个答案:

答案 0 :(得分:0)

以下是您的代码的实现,它应该适用于ICollection<T>LinkedList<T>实现的任何List<T>。请注意,您必须在方法上定义泛型类型。

public static void MergeIntoFirst<T>(ICollection<T> c1, ICollection<T> c2)
{
    if(c1==null || c2==null)
        throw new ArgumentNullException();

    if (c1 == c2)
        return; //if they are pointing to the same array, then we can exit.

    foreach (T item in c2)
    {
        if (!c1.Contains(item))
            c1.Add(item);
    }
}

然后你可以像这样使用它。

List<int> l1 = new List<int> { 1, 2, 3 };
List<int> l2 = new List<int> { 2, 3, 4 };

MergeIntoFirst(l1, l2);

Console.WriteLine(string.Join(",", l1));
// outputs: 1, 2, 3, 4

请注意,这与Enumerable.Union所做的很接近,只是它会删除两个集合中存在的重复项并生成一个新集合而不是改变第一个集合。