2017-06-21 85 views
-1

我試圖縮短代碼以最有效的方式訪問該類的所有成員中的特定屬性。C#最佳的方式來從所有同類型的成員獲得財產

public class Title 
    { 
     public string reference { get; set; } 
     public string root { get; set; } 
     public string name { get; set; } 
     public string description { get; set; } 
     public string shortT { get; set; } 
    } 

    public class Results 
    { 
     public List<Title> pop { get; set; } 
     public List<Title> exact { get; set; } 
     public List<Title> sub { get; set; } 
     ... 
    } 

Results出現了JSON反序列化。它包含相同類型的成員,pop,exactsub(成員的確切數量可能會有所不同)。我想過濾的Results誰的name包含「成龍」中的所有對象

那麼這將是通過委員會成員名單(流行,準確,次)進行迭代優化/有效的方式,並期待在性能name並查看它是否包含「jackie」,而無需直接引用pop,exact或sub。 原因是JSON可能會返回更多成員,比如popexact等,我不知道它們是高級的,所以我需要找到一種方法將它們全部組合到一個可搜索列表中(因爲它們都是相同類型的)。

因此是直接引用屬性name在單個語句中的所有成員在

的foreach(字符串n在業績*。名稱)

回答

0

可以讓列表的方式)

;那班並與表達訪問

List<Title> asdf = new List<Title>; 

asdf.where(var => var.name == "jackie").ToList().ForEach(var => 
{ 
    //do actions with this classes var. 
}; 

希望我幫你的

+0

大這是解決方案的下半年,關鍵是如何從'Results'各種'Title'成員組合成一個單一的'Title'名單沒有通過名字來訪問呢? – rboy

+0

https://dotnetfiddle.net/nDYH5m –

0

如果您想訪問它們中的內容,則必須引用這三個屬性。如果你想查看所有三個作爲一個集合的內容,你可以Union他們。

// given that r is an instance of Results 
var combinedTitles = r.exact.Union(r.pop).Union(r.sub); 
var matches = combinedTitles .Where(title => title.name == "title you want to match"); 
+0

我想,但問題是,JSON可能會返回100個成員,如流行或子或確切的,我不知道。所以我試圖找到一種方法來組合它們而不直接訪問成員名稱 – rboy

+0

你應該在這裏使用'Concat'而不是'Union'。 'Union'意味着它會根據相等性去除重複項(並且由於沒有定義相等性操作,所以它會根據參考的相等性來做;這與'Concat'是一樣的,但是有額外的開銷將事物插入底層哈希表)。 – Kyle

+0

@Kyle我不知道具體情況是否需要'Concat'或'Union',但你是對的。很高興知道有一個選擇,以便他們可以決定他們是否在意重複。 –

相關問題