将对象添加到哈希表的问题

时间:2010-05-24 14:54:30

标签: c# hashtable

我试图根据条件动态调用类方法。这就是我这样做的方式

我有三个类实现单个接口

interface IReadFile
{
    string DoStuff();
}

A,B,C三个类实现了上面的接口。

我正在尝试使用下面的代码将它们添加到哈希表中

        _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 个答案:

答案 0 :(得分:7)

作为猜测,您尚未实例化_HashT对象。

您需要在代码中的某处(可能是声明或构造函数)来实例化它:

HashTable _HashT = new HashTable();

如果您不这样做,_HashT将为nulladdNullReferenceException的尝试将因您获得{{1}}而失败。

答案 1 :(得分:2)

看来您正在看NullReferenceException。根据您提供的有限代码,我会说很可能没有分配_HashT变量。也可能是从您的一个类构造函数生成异常。

如果您使用Dictionary<>,则可以使用以下代码从哈希表中添加和提取对象。

var hashtable = new Dictionary<IReadFile>();
hashtable.Add("a", new ClassA());
hashtable.Add("b", new ClassB());
hashtable.Add("c", new ClassC());
IReadFile obj = hashtable["a"];
obj.DoStuff();

答案 2 :(得分:1)

按照您的方法,您无需就GetType()提取的值调用_HashT。该值应该已经是IReadFile类型的对象。

答案 3 :(得分:0)

你为什么打电话给GetTypeIReadFile对象是你在哈希中放置的东西。将Type对象转换为IReadFile并不会正确投射。