Как исправить размер Hashtable и определить, имеет ли он фиксированный размер или нет? - PullRequest
0 голосов
/ 07 июня 2010

Я пытаюсь исправить размер Hashtable с помощью следующего кода.

       Hashtable hashtable = new Hashtable(2);

        //Add elements in the Hashtable
        hashtable.Add("A", "Vijendra");
        hashtable.Add("B", "Singh");
        hashtable.Add("C", "Shakya");
        hashtable.Add("D", "Delhi");
        hashtable.Add("E", "Singh");
        hashtable.Add("F", "Shakya");
        hashtable.Add("G", "Delhi");
        hashtable.Add("H", "Singh");
        hashtable.Add("I", "Shakya");
        hashtable.Add("J", "Delhi");

У меня исправлено, что размер этого Hashtable равен 2, но я могу добавить в него более 2 элементов, почему это происходит, я что-то делаю неправильно?

Я пытался выяснить, имеет ли этот Hashtable размер исправления не с hashtable.IsFixedSize , он всегда возвращает false

Пожалуйста, скажите мне, где я не прав, или есть другой способ ..

Ответы [ 2 ]

1 голос
/ 07 июня 2010

После того, как вы добавили все необходимые элементы, вам нужно реализовать версию IDictionary, предназначенную только для чтения, которую вы затем сможете использовать, чтобы запретить изменение существующих записей (смотрите подклассы Hashtable и переопределяя все методы / свойства, которые изменяют значения для выброса NotSupportedException). Затем вы можете переопределить IsReadOnly и IsFixedSize, чтобы вернуть любые нужные вам значения.

Я бы также рекомендовал использовать обобщенный Dictionary<TKey, TValue> вместо Hashtable, поскольку вы получаете лучшую безопасность во время компиляции и лучшую производительность с типами значений. Однако вам придется создать собственную реализацию IDictionary<TKey, TValue> только для чтения, поскольку ни один из методов Dictionary не является виртуальным.

0 голосов
/ 09 июня 2010

Перегрузка конструктора HashTable, которая принимает параметр intacity, использует его только как подсказку от вас относительно того, сколько значений он должен содержать. Это может улучшить скорость и потребление памяти HashTable, поскольку он заполнен, но он может расти, чтобы содержать больше значений, чем эта начальная емкость. Вот почему вы можете добавить более двух значений.

...