我正在尝试将两个arraylist共享的值提取到另一个arraylist中。
using System.Linq;
private ArrayList GetSameOf2AL(ArrayList first, ArrayList second)
{
ArrayList same = new ArrayList();
var one = from int i in first select i;
var two = from int i in second select i;
var SameVal = one.Intersect(two);
//I am supposed to convert or cast SameVal into arraylist here
return same;
}
我的问题是:
var
类型转换回arraylist
,有人可以告诉我怎么样?谢谢大家的关注=)
答案 0 :(得分:3)
首先,ArrayList是一个过时的集合,在Generics引入.NET之前就已经使用了。除非您正在构建遗留代码,否则不应使用它。相反,你应该把注意力转向List类。
IEnumerable<int> first = new []{1,2,3};
IEnumerable<int> second = new [] {2,3,4};
List<int> intersection = first.Intersect(second).ToList(); // result {2,3}
如果您处于遗留模式,则无法使用泛型,您必须手动迭代列表才能找到交集。
答案 1 :(得分:3)
由于您正在处理遗留代码,因此您只需使用简单的foreach
循环:
private ArrayList GetSameOf2AL(ArrayList first, ArrayList second)
{
ArrayList same = new ArrayList();
var one = from int i in first select i;
var two = from int i in second select i;
var sameVal = one.Intersect(two);
//I am supposed to convert or cast SameVal into arraylist here
foreach (int i in sameVal)
same.Add(i);
return same;
}
这实际上是拼凑而成,重构您的代码以使用List<int>
代替ArrayList
会更好 - 努力不应该太多,它会立即得到回报。
答案 2 :(得分:2)
List<int> intersection = first.Cast<int>().Intersect(second.Cast<int>()).ToList();
或
ArrayList intersection = new ArrayList();
foreach (var i in first.Cast<int>().Intersect(second.Cast<int>()))
intersection.Add(i);
答案 3 :(得分:1)
这是使用var
关键字作为明确写出类型的快捷方式可能会让您遇到麻烦的时候。如果您已检查Intersect
LINQ扩展名的返回,则会看到返回值为IEnumerable<int>
。您可以使用部分IEnumerable
扩展程序将IEnumerable
代表的数据传输到ArrayList
:
private ArrayList GetSameOf2AL(ArrayList first, ArrayList second)
{
ArrayList same = new ArrayList();
var one = from int i in first select i;
var two = from int i in second select i;
same.AddRange(one.Intersect(two).ToArray<int>());
return same;
}