如何使用linq从对象数组中检索特定的值集

时间:2013-01-11 10:47:01

标签: c#

我有一个课程如下:

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);

}

并将所有这些对象(t1t2t3)添加到数组中。现在,我如何使用linq ???

获取对象数组中的所有套接字成员

3 个答案:

答案 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);