2016-10-13 100 views
0

我有一個簡單的類:動態比較/訪問對象的屬性與字符串引用

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

然後,我有這個類的List:

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

現在,我想在一個事件列表中的「源」屬性設置爲「我」。

,但我不希望訪問該屬性類似這樣的列表[0] .Source這樣的:

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

我知道,我的對象有「源」屬性。但我需要傳遞一個字符串來獲取該屬性並進行比較。像這樣的:

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

顯然,這是行不通的。 Basicaly我需要能夠編寫比較像o.Source == "ME"而不直接引用屬性。

我該怎麼做?

+0

下載去後,您可以嘗試微軟的動態LINQ庫,https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx到zip文件中的LinqSamples/DynamicQuery這裏有一個很好的博客文章https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library – dman2306

+2

爲什麼'。 GetType()==「我」?你應該得到的價值和比較? –

回答

4

你需要使用GetValue方法,而不是

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