2011-08-03 215 views
0

我使用下面的代碼:更改ArrayList的仿製

  var list = new Collection<ArrayList> 
         { 
          new ArrayList 
           { 
            1, 
            "Test1" 
           }, 
          new ArrayList 
           { 
            2, 
            "Test2" 
           }, 
         }; 

在上面的代碼中,我想避免的ArrayList和使用泛型。在上面的代碼中可能嗎?

編輯: 上面我在一個數組列表對象中只使用了兩個值,我可能在其中有多個int和字符串。

+0

你應該用自定義'class' /'struct' /'組<>'/等取代你'ArrayList's。它會更可讀。 – dlev

回答

5

您不能在通用列表中混合類型(除非泛型類型爲object,但這相當於ArrayList並且只是泛型的變體)。

但是,您可以創建一個包含stringint的類,並將其用作通用列表的通用參數。

public class MyClass 
{ 
public MyString string { get; set; } 
public MyInt int { get; set; } 
} 

var list = new Collection<MyClass> 
      { 
      new MyClass { MyInt = 1, MyString = "Test1" }, 
      new MyClass { MyInt = 2, MyString = "Test2" } 
      } 

另一種選擇,如果使用.NET 4.0是使用Tuple,但我寧願有一個強類型的類。

(未測試的代碼):

var list = new Collection<Tuple<int,string>> 
      { 
      Tuple.Create(1, "Test1"), 
      Tuple.Create(2, "Test2") 
      } 
+0

傳遞這個類到JavaScriptSerializer()。Serialize(list)會產生鍵/值對,我試圖避免在我的情況下,因爲我只需要像[1 ,「Test1」],[2,「Test2」] –

+0

謝謝,但我使用的是.NET 3.5,如果我有超過2個值說int,string,int,int –

+0

@Rocky - 我只提到.NET 4.0爲其他讀者和完整性。在你的情況下,我仍然會使用自定義類 - 你可以添加屬性到不同的屬性來控制序列化。 – Oded

4


泛型的要點在於,您不能將intstring放在同一個集合中。

相反,您應該創建自己的類,其中包含intstring屬性,然後創建該類的通用集合。

+0

謝謝,我以同樣的方式思考,但序列化鍵/值對來了.i.e鍵是屬性名稱和值是屬性的值。我只想在序列化後像逗號分隔形式的值,如[1,「Test1」],[2,「Test2」] –

+0

呵呵?我不確定你是什麼意思。 – SLaks

+0

將此類傳遞給JavaScriptSerializer()。Serialize(list)將生成鍵/值對 –

2

不是真的,事實上,你有不同的類型,使使用通用毫無意義。

你可以使用List<object>代替ArrayList的,但真的沒有一點。相反,您可以創建一個自定義類來保存2個值並將其用於泛型類型。

約翰

0
var list = new List < Dictionary<int, string>>(); 

那麼你可以填充它的數據,因爲你需要。

+0

如果我有超過2個值,該怎麼辦? –

+0

在這個階段,您將需要爲它創建一個自定義類,但對於您的情況,這將有效地工作。 –

1

也許你需要解釋?

var list = new Dictionary<int, string> 
{ 
    { 1, "Test1" }, 
    { 2, "Test2" } 
}; 
0

我不知道你實際上是試圖實現,但在我看來,你試圖模仿字典的行爲,可以兩個不同的值映射到每個其他。這些值可以是任何你想要的類型。

事情是這樣的:

Dictionary<int, string> d = new Dictionary<int, string>(); 
d.Add(1, "Test1"); 
d.Add(2, "Test2"); 

,你可以處理你的數據那樣簡單:

string t1 = d[1]; //will hold "Test1" 
string t2 = d[2]; //will hold "Test2" 

你要這樣呢?