4

我的代码如下:

PropertyInfo p_info_keys = obj.GetType().GetProperty("Keys");
IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);

foreach (string key in keys)
{
    // Some code
}

问题是这一行:

IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);

因为它可以是:

IEnumerable<decimal> keys = (IEnumerable<decimal>)p_info_keys.GetValue(obj, null);

我试过用这个:

IEnumerable<object> keys = (IEnumerable<object>)p_info_keys.GetValue(obj, null);

但是,当然,它不起作用。

那么,我怎样才能使用可以接受字符串和十进制的更通用的构造呢?

先感谢您。

4

1 回答 1

6

IEnumerable<T>最简单的方法是使用extends的事实IEnumerable

IEnumerable keys = (IEnumerable) p_info_keys.GetValue(obj, null);

foreach (object key in keys)
{
    ...
}

当然,您在编译时没有密钥的类型,但是如果您尝试对两种情况使用相同的非通用代码,那么无论如何这是不可能的。

另一种选择是在通用方法中执行此操作:

public void Foo<T>(...)
{
    IEnumerable<T> keys = (IEnumerable<T>) p_info_keys.GetValue(obj, null);

    foreach (T key in keys)
    {
        ...
    }
}
于 2012-08-16T06:03:26.287 回答