Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向哈希表添加对象时出现问题_C#_Hashtable - Fatal编程技术网

C# 向哈希表添加对象时出现问题

C# 向哈希表添加对象时出现问题,c#,hashtable,C#,Hashtable,我试图根据条件动态调用类方法。我就是这样做的 我有三个类实现一个接口 interface IReadFile { string DoStuff(); } 三个类A、B、C实现了上述接口 我正试图用下面的代码将它们添加到哈希表中 _HashT.Add("a", new classA()); _HashT.Add("b", new classB()); _HashT.Add("c", new classC()); 这可以很好地编译,但会出现

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

我有三个类实现一个接口

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();
如何更正上面需要将对象添加到哈希表的部分?还是我需要使用不同的方法?所有类都在相同的程序集和命名空间中


谢谢您的时间。

作为猜测,您还没有实例化您的HashT对象

您可能需要在代码声明或构造函数中的某个地方对其进行实例化:

HashTable _HashT = new HashTable();

如果不这样做,\u HashT将为null,并且尝试添加到它的操作将失败,并出现一个NullReferenceException。按照您的方法,您不需要对从\u HashT中提取的值调用GetType。该值应该已经是IReadFile类型的对象。

为什么要调用GetType?IReadFile对象是要放入哈希的对象。将类型对象强制转换到IReadFile将无法正确强制转换。

您似乎看到了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();

谢谢:当我在8个月的休息后重新开始编码时,我往往会忘记这样的事情!