C# 如何使用更通用的IEnumerable<;T>;?
我的代码如下:C# 如何使用更通用的IEnumerable<;T>;?,c#,generics,C#,Generics,我的代码如下: 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 } PropertyInfo p_info_keys=obj.GetTyp
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
}
PropertyInfo p_info_keys=obj.GetType().GetProperty(“keys”);
IEnumerable keys=(IEnumerable)p_info_keys.GetValue(obj,null);
foreach(字符串键入键)
{
//一些代码
}
问题在于这一行:
IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);
IEnumerable keys=(IEnumerable)p_info_keys.GetValue(obj,null);
因为它可以是:
IEnumerable<decimal> keys = (IEnumerable<decimal>)p_info_keys.GetValue(obj, null);
IEnumerable keys=(IEnumerable)p_info_keys.GetValue(obj,null);
我试着用这个:
IEnumerable<object> keys = (IEnumerable<object>)p_info_keys.GetValue(obj, null);
IEnumerable keys=(IEnumerable)p_info_keys.GetValue(obj,null);
但是,当然,它不起作用
那么,我如何使用可以同时接受字符串和十进制的更通用的构造呢
提前谢谢。最简单的方法是使用
IEnumerable
扩展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)
{
...
}
}
public void Foo(…)
{
IEnumerable keys=(IEnumerable)p_info_keys.GetValue(obj,null);
foreach(T键入键)
{
...
}
}
@elyashiv:是的,但那没什么区别。编译器只会在第一种情况下推断类型为IEnumerable
,在第二种情况下推断类型为IEnumerable
。它会减少代码中的字符数,但这是唯一的效果。有人将其标记为Java
,但它看起来更像C
。