如果我理解正确,您想比较类型本身,而不是该列表中的实例。
你可以这样做:
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
class 具有全部 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
:例如,您必须对其进行细微的更改才能与索引器一起使用。