我的代码如下:
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
}
Run Code Online (Sandbox Code Playgroud)
问题是这一行:
IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);
Run Code Online (Sandbox Code Playgroud)
因为它可以是:
IEnumerable<decimal> keys = (IEnumerable<decimal>)p_info_keys.GetValue(obj, null);
Run Code Online (Sandbox Code Playgroud)
我试过用这个:
IEnumerable<object> keys = (IEnumerable<object>)p_info_keys.GetValue(obj, null);
Run Code Online (Sandbox Code Playgroud)
但是,当然,它不起作用.
那么,我如何使用可以接受字符串和小数的更通用的结构?
先感谢您.
最简单的方法是使用IEnumerable<T>扩展的事实IEnumerable:
IEnumerable keys = (IEnumerable) p_info_keys.GetValue(obj, null);
foreach (object key in keys)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当然,在编译时你没有键的类型,但是如果你试图在两种情况下使用相同的非泛型代码,那么无论如何都不可能.
另一种方法是在通用方法中执行此操作:
public void Foo<T>(...)
{
IEnumerable<T> keys = (IEnumerable<T>) p_info_keys.GetValue(obj, null);
foreach (T key in keys)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)