【发布时间】:2018-08-08 02:01:28
【问题描述】:
我正在尝试创建一种可以作为列表或字典或本身作为值的类型。
定义:
public Dictionary<string, object> data = new Dictionary<string, object>();
我正在尝试寻找 object 类型的替代方法,该类型在此处用作字典值类型。
我这里的值类型是对象,因为我可以放任何我想要的。
但是当我把它拿出来时,我希望能够将它转换为 List<object> 或 Dictionary<string, object> 并进行空值检查以获得实际值。
访问:
foreach (string k in data.Keys)
ParseValue(data[k], new TextWriter());
...
private void ParseValue(object value, TextWriter writer)
{
var valList = value as List<object>;
var valDict = value as Dictionary<string, object>;
if (valList != null)
valList.ForEach(v => ParseValue(v, writer));
else if (valDict != null)
valDict.Keys.ForEach(k => ParseValue(valDict[k], writer));
else writer.WriteValue(value);
}
如果可行,那么我可以迭代和递归字典中的值,它为我提供了一个非常灵活的嵌套类型(类似于 JSON)。
对象的实例也包含有用的值。
我希望能够在那里使用ISerializable 尊重类。
我的项目是用 C# 编写的,但如果可能的话,它应该适用于我认为的任何严格类型的语言。
编辑:
我不能使用new Dictionary<string, ISerializable>();,因为它不支持原始值类型。
例如:我不能执行以下操作
Dictionary<string, ISerializable> data = new Dictionary<string, ISerializable>();
data.Add("aa", 42);
【问题讨论】:
-
“我希望能够在那里使用 ISerializable 尊重类。” 那么为什么不使用
Dictionary<string, ISerializable>? -
那么你现在遇到了什么问题?
-
我现在的问题是我无法确定字典中的值是否可序列化。
标签: c# oop types casting polymorphism