Семантически, a Dictionary<int, T>
и List<T>
очень похожи, оба являются контейнерами произвольного доступа .NET Framework. Чтобы использовать список в качестве замены словаря, вам нужно специальное значение в вашем типе T
(например null
), чтобы представить пустые слоты в вашем списке. Если T
тип не является обнуляемым, например int
, вы можете использовать int?
вместо него, или если вы просто ожидаете хранить положительные значения, вы также можете использовать специальное значение, например -1, для представления пустых слотов.
Какой из них вы выберете, зависит от диапазона значений ключа. Если ваши ключи в Dictionary<int, T>
пределах находятся в целочисленном интервале, без большого количества пробелов между ними (например, 80 значений из [0, ... 100]), тогда a List<T>
будет более подходящим, так как доступ по индексу быстрее, и в этом случае меньше памяти и времени по сравнению со словарем.
Если ваши ключевые значения равны 100 int
значениям из диапазона, подобного [0, ..., 1000000], то List<T>
требуется память для хранения 1000000 значений T, тогда как вашему словарю просто потребуется память порядка порядка 100 значений T, 100 значений типа int (плюс некоторые накладные расходы, в реальности ожидайте примерно в 2 раза больше памяти для хранения этих 100 ключей и значений). Так что в последнем случае словарь будет более подходящим.