C# LinkedList通用输入
我写了以下方法:C# LinkedList通用输入,c#,generics,linked-list,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)
// 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
可以解决这个问题,因为任何东西都是对象(除了int,chat-double-itc)
但它在运行时会抛出一个铸造示例。。。
那我该怎么办?
谢谢 这里是一个代码的实现,它应该适用于任何
i集合
,其中LinkedList
和List
都可以实现。请注意,您必须在方法上定义泛型类型
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);
}
}
公共静态无效合并到第一个(ICollection c1,ICollection c2)
{
如果(c1==null | | c2==null)
抛出新ArgumentNullException();
如果(c1==c2)
return;//如果它们指向同一个数组,则可以退出。
foreach(c2中的T项)
{
如果(!c1.包含(项目))
c1.增加(项目);
}
}
然后你可以像这样使用它
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
List l1=新列表{1,2,3};
列表l2=新列表{2,3,4};
第一个(l1,l2);
Console.WriteLine(string.Join(“,”,l1));
//产出:1、2、3、4
请注意,这与它的作用非常接近,只是它会删除两个集合中存在的重复项,并生成一个新集合,而不是对第一个集合进行变异。是否确实不想切换到
列表
?这是对ArrayList
的一般替换。或者你甚至可以让它在IMemplementsICollection
上运行,因为你需要的只是Add
和Contains
。它不是编译,编译器说找不到类型T。哦,我明白了,我也没有在函数上编写。谢谢顺便问一下,是否仍可以将其与ArrayList
一起使用?(我不需要,但很高兴知道如果Sameday我会有这样的东西)@Sportalcraft不,这对ArrayList
不起作用,一般来说,你不应该使用ArrayList
。这是在泛型出现之前的一个时代遗留下来的。