链接列表通用输入



>我写了下面的方法:

// 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,因为据我所知,数组列表不能很好地与linq配合使用......

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

我认为使用LinkedList<object>可以解决它,因为任何东西都是对象(exept int,聊天双itc(

但是它在运行时会抛出一个铸造选项...那我该怎么办?谢谢!

下面是代码的实现,它应该适用于LinkedList<T>List<T>实现的任何ICollection<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的功能很接近,只是它会删除两个集合中存在的重复项并生成一个新集合,而不是改变第一个集合。

相关内容

  • 没有找到相关文章

最新更新