如何将字符串中的类型直接加载到C#中的linq表达式中?
这就是定义:如何将字符串中的类型直接加载到C#中的linq表达式中?,c#,linq,string,lambda,types,C#,Linq,String,Lambda,Types,这就是定义: public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source); 你不能。泛型参数在编译时强制执行类型安全性,而type.GetType使用反射,并且在编译时未知。您到底想实现什么?如果您不知道所涉及的类型,则无法在编译时执行此操作,但您可以为IEnumerable编写自己的扩展方法: public static IEnumerable OfType(this IEnu
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);
你不能。泛型参数在编译时强制执行类型安全性,而
type.GetType
使用反射,并且在编译时未知。您到底想实现什么?如果您不知道所涉及的类型,则无法在编译时执行此操作,但您可以为IEnumerable编写自己的扩展方法:
public static IEnumerable OfType(this IEnumerable source, Type t)
{
foreach(object o in source)
{
if(t.IsAssignableFrom(o.GetType()))
yield return o;
}
}
这是否意味着我必须手动遍历集合并使用typeof查看它们的类型?您不能使用
typeof
,因为它希望您传递一个在编译时已知的值。您可能会使用非强类型集合,但再一次,您想做什么?您谈论的是对集合进行迭代。什么收藏品?请提供更多详细信息。我正在尝试执行ISite.Container.Components.OfType().First()。。和驻留在另一个项目/程序集中。我不能添加对该项目的引用。
public static IEnumerable OfType(this IEnumerable source, Type t)
{
foreach(object o in source)
{
if(t.IsAssignableFrom(o.GetType()))
yield return o;
}
}