使用字符串引用动态地比较/访问对象的属性

时间:2016-10-13 17:18:45

标签: c# reflection lambda gettype

我有一个简单的课程:

class Event {
     public string Source { get; set; }
}

然后我有一个这个类的列表:

var list = new List<Event>();
        list.Add(new Event { Source="Me" });
        list.Add(new Event { Source="You" });

现在我希望在列表中使用&#34; Source&#34;财产设置为&#34;我&#34;。

但我不想像这个列表[0]那样访问这个属性。像这样的资源:

list.Where(o => o.Source == "Me").Single()

我知道我的对象有&#34; Source&#34;属性。但我需要传递一个字符串来获取此属性并进行比较。像这样:

list.Where(o => o.GetType().GetProperty("Source").GetType() == "Me").Single()

显然,这不起作用。 Basicaly我需要能够编写像o.Source == "ME"这样的比较而不直接引用该属性。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

您需要使用GetValue方法

list.Where(o => o.GetType().GetProperty("Source").GetValue(o, null) == "Me").Single()