【发布时间】:2017-01-18 04:23:25
【问题描述】:
我写的扩展如下:
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, bool> predicate) where T : class, new()
{
....
}
下面显示的类 Sample 是使用 Reflection TypeBuilder 动态创建的。 我创建运行时实例化的对象如下:
public class Sample
{
public Sample()
{
Children= new ObservableTestCollection<Sample>(this);
}
public Sample(IEnumerable<Sample> source)
{
Children= new ObservableTestCollection<Sample>(this, source);
}
public ObservableTestCollection<Sample> Children;
}
上面的ObservableTestCollection是由ObservableCollection派生的
下面的typeBuilder是由Reflection TypeBuilder构建的。 我喜欢做的是:
var type = typeBuilder.CreateType();
var obj = Activator.CreateInstance(type);
var results = (IEnumerable<...>)(obj.GetProperty("Children").GetValue(obj)).Traverse(s=>s!=null);
这里的问题是我不能转换为 IEnumerable,因为 Sample 的类型是由反射 TypeBuilder 创建的。这意味着代码中的Sample没有明确的类型。
所以,我想找到一些方法来转换泛型 IEnumerable<...> 或调用 Traverse 的扩展方法。
提前致谢。
【问题讨论】:
-
你有什么问题?
标签: c# generics extension-methods