C# 从未知类型的字典中获取键和值列表,而不使用动态
我正在尝试将字典转换为键值对,这样我就可以对它进行一些特殊的解析,并以字符串格式存储它。我使用的是Unity,所以我不能使用dynamic关键字。这是我的设置 我有一个类,我正在迭代它的属性,操作它们的值,并将它们放入一个新的字典中。问题是,如果不使用动态技巧,我不知道如何从我不知道其类型的字典中获取键和值。有什么想法吗?我将需要做同样的列表C# 从未知类型的字典中获取键和值列表,而不使用动态,c#,dictionary,C#,Dictionary,我正在尝试将字典转换为键值对,这样我就可以对它进行一些特殊的解析,并以字符串格式存储它。我使用的是Unity,所以我不能使用dynamic关键字。这是我的设置 我有一个类,我正在迭代它的属性,操作它们的值,并将它们放入一个新的字典中。问题是,如果不使用动态技巧,我不知道如何从我不知道其类型的字典中获取键和值。有什么想法吗?我将需要做同样的列表 Type t = GetType(); Dictionary<string, object> output = new Dic
Type t = GetType();
Dictionary<string, object> output = new Dictionary<string, object>();
foreach(PropertyInfo info in t.GetProperties())
{
object o = info.GetValue(this, null);
if(info.PropertyType.GetGenericTypeDefinition() == typeof(Dictionary<,>))
{
Dictionary<string, object> d = new Dictionary<string, object>();
foreach(object key in o) //not valid
{
object val = DoSomething(o[key]);//not valid
output[key] = val;
}
}
else if(info.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
}
}
return output;
Type t=GetType();
字典输出=新字典();
foreach(t.GetProperties()中的PropertyInfo信息)
{
对象o=info.GetValue(这个,null);
if(info.PropertyType.GetGenericTypeDefinition()==typeof(字典))
{
字典d=新字典();
foreach(对象键在o中)//无效
{
object val=DoSomething(o[key]);//无效
输出[键]=val;
}
}
else if(info.PropertyType.GetGenericTypeDefinition()==typeof(列表))
{
}
}
返回输出;
字典
还实现了非泛型的IDictionary
接口,因此您可以使用该接口:
IDictionary d = (IDictionary) o;
foreach(DictionaryEntry entry in d)
{
output[(string) entry.Key] = entry.Value;
}
请注意,如果密钥类型不是string
,则此操作显然会失败。。。尽管您可以调用ToString
,而不是强制转换
实际上,您可以轻松地检查任何IDictionary
实现,而不仅仅是Dictionary
,甚至无需进行讨厌的反射检查:
IDictionary dictionary = info.GetValue(this, null) as IDictionary;
if (dictionary != null)
{
foreach (DictionaryEntry entry in dictionary)
{
output[(string) entry.Key] = entry.Value;
}
}
谢谢你的快速回答!让我试试,看看是否有效。有些东西在IOS上无法正常工作,而其他的则无法正常工作。我会回来报到的。它可能要到周一才会出现我认为应该是output[(string)entry.Key]=d[entry.Key]@user2292539:不完全正确-应该是
output[(string)entry.Key]=entry.Value代码>-当我们已经获得带有值的条目时,不需要按键查找它。我已经修正了我的答案。所以在考虑了一段时间后,我不知道为什么我不首先使用序列化来处理我想要的内容,但这仍然是一件值得学习的事情。