类成员的名字。如果我的理解是正确的,你要比较的类型本身,不在名单内的情况。
你可以这样做:
List<string> metadata = new List<string>();//string list
metadata.Add("itemname");
metadata.Add("soid");
metadata.Add("qty");
metadata.Add("yada");
var result = from str in metadata
join prop in typeof(Input).GetProperties() on str equals prop.Name
select str;
foreach (string prop in result)
{
Console.WriteLine(prop);
}
现在,如果你有T
未知对象的名单,并希望与元数据相互匹配,告诉我,我会帮你的。
编辑根据您的评论:when we get the common name between list<input> and string how will get the value of corresponding member of the class.now you return only common names r8..?
你可以不喜欢这样。假设你有这两个类:
public class Input
{
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class Yada : Input
{
public string yada { get; set; }
}
所以Input
有4个属性的3,和Yada
类有所有4
然后假设我们有对象的列表:
List<Input> inputclass = new List<Input>();//inputclass list
inputclass.Add(new Input() { itemname = "test",soid="myId",qty=10 });
inputclass.Add(new Yada() { itemname = "test2",soid="myId2", yada = "woo",qty=20 });
您可以使用此代码获取对象的所有匹配属性,包括其当前值:
var result = inputclass.Select(
input => (from str in metadata
join prop in input.GetType().GetProperties()
on str equals prop.Name
select new { Obj = input, Prop = str, Value = prop.GetValue(input, null) }))
.SelectMany(i => i)
.GroupBy(obj => obj.Obj);
foreach (var obj in result)
{
Console.WriteLine(obj.Key);
foreach (var prop in obj)
{
Console.WriteLine(prop.Prop + ":" + prop.Value);
}
Console.WriteLine();
}
Console.ReadKey();
这是我输入:
刚上一记,使用GetValue
时要小心:你必须做的细微变化为它用在索引工作,例如。
你想如何看字典?即什么将是关键,什么价值? – 2013-04-23 11:59:23
而且?你的问题是什么 ?你尝试了什么,你得到了哪些错误? – 2013-04-23 11:59:34
这里有什么'inputclass'的用法? – 2013-04-23 12:04:18