【发布时间】:2011-02-04 19:00:11
【问题描述】:
这是定义:
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);
如何将 TResult 替换为:
Type.GetType("MyClass from assembly");
【问题讨论】:
标签: c# linq string lambda types
这是定义:
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);
如何将 TResult 替换为:
Type.GetType("MyClass from assembly");
【问题讨论】:
标签: c# linq string lambda types
你不能。通用参数在编译时强制执行类型安全,而 Type.GetType 使用反射并且在编译时未知。你到底想达到什么目的?
【讨论】:
typeof,因为它希望您传递一个在编译时已知的值。您可能可以使用非强类型集合,但再一次,您要做什么?您谈论迭代集合。什么收藏?提供更多细节。
如果您不知道所涉及的类型,则无法在编译时执行此操作,但您可以为 IEnumerable 编写自己的扩展方法:
public static IEnumerable OfType(this IEnumerable source, Type t)
{
foreach(object o in source)
{
if(t.IsAssignableFrom(o.GetType()))
yield return o;
}
}
【讨论】: