Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符串中的类型直接加载到C#中的linq表达式中?_C#_Linq_String_Lambda_Types - Fatal编程技术网

如何将字符串中的类型直接加载到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;
    }
}