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

C# 如何使用linq从对象数组中检索特定的值集,c#,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="str

我有一门课,如下:

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获取对象数组中的所有套接字成员?

如果您使用的是.Net framework 2.0或更高版本,则应该使用而不是ArrayList。(必须将字段定义为公共字段,才能在类外访问)

代码中还有许多其他问题
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();
var items=a.Cast().Select(r=>r.s.ToArray();

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

所以

a.Cast.Select(t=>t.s);
我会告诉你结果的

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

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

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

,您可以这样做(这要求测试的公共属性):

var a=新列表()
{
新测试{i=1,str=“string1”,s=soc1,dt=DateTime.Today()},
新测试{i=2,str=“string2”,s=soc2,dt=DateTime.Today()},
新测试{i=3,str=“string3”,s=soc3,dt=DateTime.Today()}
};
var sockets=a.Select(t=>t.s);

不会的,记住
s
是privateOops在这种情况下,他要么需要公共插座道具,要么试试reflectionYa这很有效,听起来不错。现在,如果我声明一个集合哈希表,并用一些值初始化所有3个哈希表对象。现在,如何使用linq???@RaghuSYadav而不是使用generic在所有3个哈希表中获取这些集合值。您正在使用.Net framework 1.1吗?请使用类型化集合。如果您确实想使用Hashtable,那么Hashtable.Values.OfType()将起作用。您如何在不进行反射的情况下访问类外的私有成员?
var items = a.Cast<test>().Select(r=> r.s).ToArray();
a.Cast<test>.Select(t => t.s);
a.OfType<test>.Select(t => t.s);
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);