-1

我有一堂课如下:

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

}

并将所有这些对象(、、、)添加t1t2数组t3中。现在,如何使用 linq 获取对象数组中的所有套接字成员???

4

3 回答 3

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();
于 2013-01-11T10:49:27.597 回答
0

我认为您应该将 ArrayList 转换为“test”类型的集合

所以

a.Cast<test>.Select(t => t.s);

会给你结果。

或者,如果您认为您的 ArrayList 可能还包含其他类型的对象,您可以使用

a.OfType<test>.Select(t => t.s);

注意:确保 Socket 是可公开访问的属性,并根据您使用的框架,考虑使用通用集合

于 2013-01-11T10:51:52.233 回答
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);
于 2013-01-11T10:54:17.277 回答