我有一个课程如下:
public class test
{
int i;
string str;
Socket s;
DateTime dt;
}
我正在创建此类的对象,如下所示
public void collection()
{
test t1=new test{i=1,str="string1", s=soc1, dt=DateTime.Today() };
test t2=new test{i=2,str="string2", s=soc2, dt=DateTime.Today() };
test t3=new test{i=3,str="string3", s=soc3, dt=DateTime.Today() };
ArraList a=new ArrayList();
a.Add(t1);
a.Add(t2);
a.Add(t3);
}
并将所有这些对象(t1
,t2
,t3
)添加到数组中。现在,我如何使用linq ???
答案 0 :(得分:2)
如果您正在使用.Net framework 2.0或更高版本,则应使用Generic List而不是ArrayList。 (您必须将您的字段定义为公共字段才能在课堂外访问)
List<test> list = new List<test>();
list.Add(t1);
....
获取您可以执行的所有项目:
var items = list.Select(r=> r.s).ToArray();
您的代码中还有许多其他问题。 DateTime.Today
用作方法,而它只是一个属性。如果您想使用ArrayList,那么您的类和更正的代码应该是:
public class test
{
public int i;
public string str;
public Socket s;
public DateTime dt;
}
test t1 = new test { i = 1, str = "string1", s = soc1, dt = DateTime.Today };
test t2 = new test { i = 2, str = "string2", s = soc2, dt = DateTime.Today };
test t3 = new test { i = 3, str = "string3", s = soc3, dt = DateTime.Today };
ArrayList a = new ArrayList();
a.Add(t1);
a.Add(t2);
a.Add(t3);
从ArrayList
中选择套接字var items = a.Cast<test>().Select(r=> r.s).ToArray();
答案 1 :(得分:0)
我认为你应该将ArrayList转换为'test'
类型的集合所以
a.Cast<test>.Select(t => t.s);
会给你结果。
或者如果您认为您的ArrayList也可能包含其他类型的obejct,您可以使用
a.OfType<test>.Select(t => t.s);
注意:确保Socket是可公开访问的属性,并且根据您使用的框架,请考虑使用Generic集合
答案 2 :(得分:0)
你可以这样做(这需要测试的公共属性):
var a = new List<test>()
{
new test{i=1,str="string1", s=soc1, dt=DateTime.Today() },
new test{i=2,str="string2", s=soc2, dt=DateTime.Today() },
new test{i=3,str="string3", s=soc3, dt=DateTime.Today() }
};
var sockets = a.Select(t => t.s);