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个月的休息后重新开始编码时,我往往会忘记这样的事情!