Список Списков различных типов

Одна из структур данных в моем текущем проекте требует, чтобы я сохранил списки различных типов (Строка, интервал, плавание, и т.д.). Я должен смочь динамично сохранить любое количество списков, не зная то, что вводит, они будут.

Я пытался хранить каждый список как object, но я столкнулся с проблемами, пытающимися вспоминать в соответствующий тип (это продолжало распознавать все как a List<String>).

Например:

List<object> myLists = new List<object>();

public static void Main(string args[])
{
    // Create some lists...

    // Populate the lists...

    // Add the lists to myLists...

    for (int i = 0; i < myLists.Count; i++)
    {
        Console.WriteLine("{0} elements in list {1}", GetNumElements(i), i);
    }
}

public int GetNumElements(int index)
{
    object o = myLists[index];

    if (o is List<int>)
        return (o as List<int>).Count;

    if (o is List<String>)                  // <-- Always true!?
        return (o as List<String>).Count;   // <-- Returning 0 for non-String Lists

    return -1;
}

Я делаю что-то неправильно? Существует ли лучший способ сохранить список списков различных типов или там лучший способ определить, является ли что-то списком определенного типа?

8
задан themarshal 19 March 2010 в 20:15
поделиться

1 ответ

Тип List наследуется от неуниверсального интерфейса IList . Поскольку все значения в типе myList имеют привязку к List , вы можете использовать их как неуниверсальный IList . Таким образом, вы можете использовать это, чтобы значительно упростить вашу логику

public int GetNumElements(int index) {
  object o = myLists[index];
  var l = o as IList;
  return l.Count;
}

Или, поскольку вы знаете, что все значения, хранящиеся в myList , будут связанной версией List , используйте IList в качестве типа вместо объекта .

List<IList> myLists = new List<IList>();
...
public int GetNumElements(int index) {
  return myList[index].Count;
}
10
ответ дан 5 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: