2013-02-05 97 views
6

我需要創建一對並將其存儲在某處。我該怎麼做?匿名類型列表?

我想:

for (int i = 0; i < 100; i++) 
{ 
    var item=new { a=i , b="lala" ,c=4.5m}; //anonymous type 
} 

但轉念一想:List<what>

我可以使用動態但我想Intellisense。

(我可以有也可以使用Tuple<int,string,decimal>但如果我已經有我需要的東西(=new { a=i , b="lala" ,c=4.5m};),我爲什麼要使用其它類型(元組)?)

是否有任何解決這個?

+0

「某些東西」是從一個接口還是一個類派生的? – daryal

+0

沒有。我在飛行中創建它。 (就像我的樣本) –

+0

你的意思是你想創建一個匿名類型的列表? –

回答

14

您可以使用類型推斷

var items = Enumerable.Range(0,100) 
         .Select(i => new { a=i , b="lala", c=4.5m }) 
         .ToList(); // not necessary (you can use IEnumerable) 
+0

ToList已經阻止捕獲的VAR issue.right? –

+0

@RoyiNamir對不起,沒有得到你的意思*捕獲var問題*。如果要多次使用項目,最好使用'ToList()'或'ToArray()'。如果你要迭代一次項目,那麼只需使用匿名類型的IEnumerable '(進一步枚舉將創建新項目)。這就是爲什麼我在'ToList()'上添加了這個評論。 –

3

不知道,你怎麼填內for領域,但你可以嘗試:

var lstOfSmth = Enumerable.Range(0, 100) 
          .Select(i => new { a = i, b = "lala", c = 4.5m }) 
          .ToList(); 
2

我爲什麼要使用其它類型(元組)

,因爲他們已經正是爲此而設計的。如果你害怕冗長的代碼,那麼using指令也可以解救。

using myPair = Tuple<int,string>; 
using myTriple = Tuple<int,string,decimal>; 
//... 
for (int i = 0; i < 100; i++) 
{ 
    myPair pair = new myPair(1,"string"); 
    myTriple triple = new myTriple(i,"lala", 4.5); 
} 
+2

亞歷克斯 - 4.5米不是度量單位(它不是米)。它迫使4.5是一個十進制數,而不是一個浮點數,這在數值上是一個不同的世界。 – Eilon

+0

http://www.dotnetperls.com/suffix –

+0

哦,恥辱我錯過了。我會解決問題的 – Alex