重复:C# Accessing data in System.Object[]
当我运行以下代码时:
foreach (object bar in list)
{
Console.WriteLine = bar;
}
我得到以下输出:
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
System.Collections.DictionaryEntry
但是如何写出上面每一行的内容?
答案 0 :(得分:4)
foreach (DictionaryEntry entry in list)
{
Console.WriteLine("{0}={1}", entry.Key, entry.Value);
}
编辑:如果你希望它适用于任何,并递归到结果中的任何对象(例如根据Kloti的回复进入子对象[])你基本上需要用反射。我会做这样的事情:
我怀疑有些图书馆可以在某个地方执行此操作,但我没有人可以处理。
答案 1 :(得分:0)
重新审核第二个问题(object[]
) - 请参阅here。
(呃,坚持下去!那也是你!你之前问过这个问题......重复吗?)
答案 2 :(得分:0)
没有可以遍历任何未知数据结构的通用解决方案。但是,您可以编写一个递归算法,该算法适用于一组已知类型(如标量,字典,列表等),例如:
public void Dump(object obj)
{
if(obj is IList)
{
DumpList((IList)list);
}
else if(obj is IDictionary)
{
DumpDictionary(dict)
}
else
{
Console.WriteLine(obj);
}
}
public void DumpList(IList list)
{
foreach(object item in list)
{
Dump(item);
}
}
public void DumpDictionary(IDictionary dict)
{
foreach (DictionaryEntry entry in dict)
{
Dump(entry.Key);
Console.Write("=");
Dump(entry.Value);
}
}
对于更好,更可扩展的解决方案,您可以使用责任链模式,但我希望尽可能简单地保持此示例。
答案 3 :(得分:0)
JohnSkeet基本上回答了,但错过了细节。 您需要将字典打包到IDictionary接口以访问DirectoryEntry类。
public void Test
{
Dictionary<string, object> objectList = new Dictionary<string, object>();
Dictionary<string, object> guidList = new Dictionary<string, Guid>();
IterateGenericDict(objectList);
IterateGenericDict(guidList);
}
public void IterateGenericDict(object obj)
{
foreach (DictionaryEntry entry in (IDictionary)obj)
{
Console.WriteLine(entry.Key + "=" entray.Value.ToString());
}
}