2012-07-26 118 views
5

我有一個包含很多對象的列表List<MyObjects> - Im遍歷這個列表並讀取對象。這很好。我現在只是放棄了,如果我可以給這個List增加1個特殊值 - 不是對象,只有1個值(一個字符串),那將會是多麼的棒。添加屬性到列表?

我現在就可以創建

class Needless 
{ 
    public List<MyObjects> MyList { get; set; } 
    public string MyValue { get; set; } 
} 

,但我試着去避免的類。我真的需要1個字符串和每個輸入List<MyObjects>任何想法?

+0

「MyValue」與「MyList」中的值無關嗎? – 2012-07-26 14:59:17

+0

MyValue標識MyList – miri 2012-07-26 15:01:44

+0

它會在這種情況下將'MyList'和'MyValue'添加到'Dictionary',比如'Dictionary >'嗎? – 2012-07-26 15:02:47

回答

8

Tuple<string, List<MyObject>>是一個選項。然而,如果你打算使用這個配對很多,我會建議創建一個自定義的類,使其更加明確 - 或者像你所做的那樣,或者通過派生List<MyObject>並添加字符串作爲屬性。

如果是「範圍內」的工作,你總是可以讓匿名類型:

var t = new { TheString = "", TheList = new List<MyObject>() }; 
var list = t.TheList; 
var s = t.TheString; 

但這只是真的有效益的方法的範圍。編譯器可以爲此提供IntelliSense,它在編譯時是強類型的。

或者,如果你真的想全力以赴,用ExpandoObjectSystem.Dynamic

var expando = new ExpandoObject(); 
expando.List = new List<MyObject>(); 
expando.TheString = ""; 

這行中鍵入不帶任何的IntelliSense支持,並且將調用DLR。 ExpandoObject只需使用引擎蓋下的IDictionary<string, object>,所以......

var dict = (IDictionary<string, object>)expando; 

...是有效的。

最後一個選項是舌尖。它會起作用,但與其他選項相比,針對它的開發經驗並不理想。也就是說,我們在測試代碼中使用ExpandoObject,但我不記得原因。一個人只能希望推理是健全的,但它可能是一個開發人員越來越頭暈的新玩具...

+2

+1只是表明這一點。 – mellamokb 2012-07-26 15:00:45

2

你可以繼承列表,並簡單地添加你的財產,它比一個組合列表更清潔

0

您可以使用您的Needless類擴展List實現。這樣你仍然可以把你的列表當成一個列表。