проблема добавления объекта в хеш-таблицу - PullRequest
0 голосов
/ 24 мая 2010

Я пытаюсь вызвать метод класса динамически в зависимости от условия.Вот как я это делаю

У меня три класса реализуют один интерфейс

interface IReadFile
{
    string DoStuff();
}

Три класса A, B, C реализуют интерфейс выше.

Iя пытаюсь добавить их в хеш-таблицу с кодом ниже

        _HashT.Add("a", new classA());
        _HashT.Add("b", new classB());
        _HashT.Add("c", new classC());

Это прекрасно компилируется, но выдает ошибку времени выполнения. {Ссылка на объект не установлена ​​на экземпляр объекта.}

Я планировал вернуть правильный тип интерфейса в зависимости от параметра, который соответствует значению ключа.сказать, если я отправлю в.ClassA возвращается к типу интерфейса и вызывается метод.

        IReadFile Obj = (IReadFile )_HashT["a"].GetType();
        obj.DoStuff();

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

Спасибо за ваше время.

Ответы [ 4 ]

7 голосов
/ 24 мая 2010

Как вы предполагаете, вы не создали экземпляр своего _HashT объекта.

Вам нужно где-то в вашем коде (возможно, объявление или конструктор), чтобы создать его экземпляр:

HashTable _HashT = new HashTable();

Если вы этого не сделаете, _HashT будет null, и попытка add к нему потерпит неудачу с NullReferenceException, как вы получаете.

2 голосов
/ 24 мая 2010

Похоже, вы видите NullReferenceException.Исходя из предоставленного вами ограниченного кода, я бы сказал, что, вероятно, переменная _HashT не назначена.Вполне возможно, что исключение также генерируется одним из ваших конструкторов классов.

Если вы используете Dictionary<>, вы можете использовать следующий код для добавления и извлечения объектов из хеш-таблицы.1007 *

1 голос
/ 24 мая 2010

Следуя вашему подходу, вам не нужно вызывать GetType() на значение, которое вы извлекаете из _HashT. Значение уже должно быть объектом типа IReadFile.

0 голосов
/ 24 мая 2010

Почему вы звоните GetType? Объект IReadFile - это то, что вы помещаете в хеш. Приведение объекта Type в IReadFile не будет выполняться правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...