我正在用 C# 实现一种联网的多类型哈希表,但遇到了一些问题。每个条目都有一些与之关联的元数据,例如字符串名称和 ID 号。我的代码中有一些地方是我对条目进行操作的地方,但我不一定需要知道它们包含的类型。因此,例如,在解析更新数据包时,我希望能够执行以下操作:
entry.Name = ParseName(data);
entry.Id = ParseId(data);
entry = ParseValue(entry, data);
table.Insert(entry);
whereParseValue()
获取条目,根据我从网络获得的数据设置某种“值”参数和某种“类型”参数,然后返回一个通用条目。然后,当我想对数据做一些事情时,我希望能够做一些事情,比如切换entry.Type
,然后通过将其转换为entry.Type
. 但是每次我尝试做这样的事情时,我最终都需要将类型参数放在我不知道类型的地方。我知道该类型是 6 种可能的类型之一(bool
、double
、string
、List<bool>
、List<double>
或List<string>
),但我不知道它是哪些类型。有没有办法我可以在 C# 中做到这一点,或者甚至更好,有没有办法可以改变我的设计,这样这不是问题?
注意:上面的所有代码都是我正在做的事情的简化表示,因为我不想陷入解析这些数据包所需的混乱位。
编辑:我如何尝试使用它的示例(我知道这不是有效的 C#)
foreach( entry in table ) {
switch( entry.Type ) {
case typeof(bool):
displayBool( (bool)(entry.Value) );
break;
case typeof(double):
displayDouble( (double)(entry.Value) );
break;
case typeof(string):
displayString( (string)(entry.Value) );
break;
case typeof(List<bool>):
displayListOfBool( (List<bool>)(entry.Value) );
break;
case typeof(List<double>):
displayListOfDouble( (List<double>)(entry.Value) );
break;
case typeof(List<string>):
displayListOfStrings( (List<string>)(entry.Value) );
break;
}
}
编辑2:如果有帮助,我要实现的规范在这里:http: //firstforge.wpi.edu/sf/docman/do/downloadDocument/projects.wpilib/docman.root/doc1318