Хорошая коллекция C # - PullRequest
7 голосов
/ 18 мая 2011

Что такое хорошая коллекция в C # для хранения данных ниже:

У меня есть флажки, которые вводят subjectId, varnumber, varname и title, связанные с каждым флажком.

Мне нужноколлекция, которая может быть любого размера, например ArrayList, может быть с:

      list[i][subjectid] = x;
      list[i][varnumber] = x;
      list[i][varname] = x;
      list[i][title] = x;

Есть хорошие идеи?

Ответы [ 8 ]

14 голосов
/ 18 мая 2011

A List<Mumble>, где Mumble - это небольшой вспомогательный класс, который хранит свойства.

List<Mumble> list = new List<Mumble>();
...
var foo = new Mumble(subjectid);
foo.varnumber = bar;
...
list.Add(foo);
,..
list[i].varname = "something else";
7 голосов
/ 18 мая 2011
public Class MyFields
{
    public int SubjectID { get; set; }        
    public int VarNumber { get; set; }
    public string VarName { get; set; }
    public string Title { get; set; }
}

var myList = new List<MyFields>();

Для доступа к члену:

var myVarName = myList[i].VarName;
1 голос
/ 18 мая 2011

Общий список, List<YourClass> был бы великолепен - если у YourClass есть свойства subjectid, varnumber и т. Д.

0 голосов
/ 18 мая 2011

Если есть внешняя вероятность, что порядок [i] не в предсказуемом порядке или, возможно, имеет пробелы, но вам нужно использовать его в качестве ключа:

public class Thing
{
    int SubjectID { get; set; }        
    int VarNumber { get; set; }
    string VarName { get; set; }
    string Title { get; set; }
}

Dictionary<int, Thing> things = new Dictionary<int, Thing>();
dict.Add(i, thing);

Тогда, чтобы найти Thing:

var myThing = things[i];
0 голосов
/ 18 мая 2011

Как уже говорили другие, похоже, что вам лучше создать класс для хранения значений, чтобы ваш список возвращал объект, содержащий все необходимые данные. Хотя двумерные массивы могут быть полезны, это не похоже на одну из таких ситуаций.

Для получения дополнительной информации о лучшем решении и о том, почему двумерный массив / список в этом случае не очень хорошая идея, вы можете прочитать: Создать список объектов вместо множества списков значений

0 голосов
/ 18 мая 2011

Поскольку это пара ключ, значение, я бы порекомендовал вам использовать общую коллекцию на основе IDictionary .

// Create a new dictionary of strings, with string keys, 
// and access it through the IDictionary generic interface.
IDictionary<string, string> openWith = 
    new Dictionary<string, string>();

// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
0 голосов
/ 18 мая 2011

Определение того, какая коллекция обычно начинается с того, что вы хотите с ней делать?

Если ваш единственный критерий, это может быть anysize, то я бы рассмотрел List<>

0 голосов
/ 18 мая 2011

Вы, вероятно, захотите использовать для этого двумерный массив и распределить позиции во втором измерении массива для каждого из ваших значений. Например, list[i][0] будет subjectid, list[i][1] будет varnumber и т. Д.

...