通用列表/字典

5
我正在尝试通过反射输出对象图。其中有几个通用类型(列表,字典)。我不知道它们包含的类型(字符串,对象等),但想要列出它们(使用.ToString())。
那么,有没有一种通用的方法可以以通用方式输出通用列表/字典,即不必为每个键<->值组合编写重载函数?
我认为这将在.NET 4.0中实现,但目前还没有到来。。

我想知道 var 关键字能否帮助解决这个问题。我怀疑不行。 - Brian
1个回答

4

如果你正在使用反射,泛型会变得非常棘手。你能否简单地使用非泛型接口?IDictionary/IList?这样会容易得多...就像这样:

static void Write(object obj) {
    if (obj == null) { }
    else if (obj is IDictionary) { Write((IDictionary)obj); }
    else if (obj is IList) { Write((IList)obj); }
    else { Console.WriteLine(obj); }
}
static void Write(IList data) {
    foreach (object obj in data) {
        Console.WriteLine(obj);
    }
}
static void Write(IDictionary data) {
    foreach (DictionaryEntry entry in data) {
        Console.WriteLine(entry.Key + "=" + entry.Value);
    }
}

一个经典的过度思考案例。通用列表可以分配给IList,所以我只需要弄清楚它是列表还是字典即可。谢谢。 - Sascha
实际上,两者都不是自动可转换的;IList<T> 不是 IList 的子类,IDictionary<TKey,TValue> 也不是 IDictionary 的子类 - 但大多数实现都提供了这两个接口。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接