Изменить arraylist на универсальный - PullRequest
1 голос
/ 03 августа 2011

Я использую код ниже:

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

В коде выше я хочу избежать ArrayList и использовать Generics.Возможно ли это в приведенном выше коде?

Редактировать: Выше я использовал только два значения в одном объекте массива, у меня может быть несколько элементов типа int и string.

Ответы [ 6 ]

5 голосов
/ 03 августа 2011

Нельзя смешивать типы в общем списке (если только универсальный тип не равен object, но это равняется ArrayList и является просто извращением обобщенных типов).

Но вы можете создать класс, содержащий string и int и использовать его в качестве универсального параметра для универсального списка.

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")
           }
4 голосов
/ 03 августа 2011

номер
Суть дженериков в том, что вы не можете поместить int и string в одну коллекцию.

Вместо этого вы должны создать свой собственный класс со свойствами int и string, а затем создать общую коллекцию этого класса.

2 голосов
/ 03 августа 2011

Не совсем, тот факт, что у вас есть разные типы, делает использование общего бессмысленным.

Вы можете использовать List<object> вместо ArrayList, но в действительности нет никакого смысла.Вместо этого вы можете создать собственный класс для хранения двух значений и использовать его в универсальном типе.

John

1 голос
/ 03 августа 2011

Может быть, вам нужен словарь?

var list = new Dictionary<int, string>
{
    { 1, "Test1" },
    { 2, "Test2" }
};
0 голосов
/ 03 августа 2011

Я не уверен, чего вы на самом деле пытаетесь достичь, но мне кажется, что вы пытаетесь имитировать поведение словаря или карты , которая может отображать дваразные значения друг к другу.Эти значения могут быть любого типа.

Примерно так:

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"

хотите что-то подобное?

0 голосов
/ 03 августа 2011
var list = new List < Dictionary<int, string>> ();

тогда вы можете заполнить данные данными так, как вам нужно.

...