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