无法调用Generic方法Enumerable.Where

时间:2017-01-31 18:26:07

标签: c# .net generics lambda .net-4.5

这是我的代码 - 我正在尝试生成Lambda

public static void CallIEnumerableWhere()
{
    List<int> lst = new List<int>();
    lst.Add(1);
    lst.Add(2);
    lst.Add(3);
    Type console = typeof(Enumerable);
    var tt = console.GetMethods().Where(x => x.Name.Contains("Where")).ToList()[0];

    var genericParam1 = Expression.Parameter(typeof(IEnumerable<>).MakeGenericType(typeof(IEnumerable<>)));

    MethodInfo method2 = tt.MakeGenericMethod(typeof(IEnumerable<>));
    var args = tt.GetGenericArguments();

    ParameterExpression lambdaParam2 = Expression.Parameter(args[0]);
    Expression methodCall = Expression.Call(null, method2, lambdaParam2);
    //^^ERROR ON THIS LINE^^^

    //var finalLambdaExpression = Expression.Lambda<...>...

}

我不确定我做错了什么。我想模仿:

int z = 1;
lst.Where(x => x == z)

这是我在运行时获得的错误:

  

发生了'System.ArgumentException'类型的未处理异常   System.Core.dll

     

其他信息:方法   System.Collections.Generic.IEnumerable 1[System.Collections.Generic.IEnumerable 1 [T]]   其中,[IEnumerable的1](System.Collections.Generic.IEnumerable 1 [System.Collections.Generic.IEnumerable 1[T]], System.Func 2 [System.Collections.Generic.IEnumerable`1 [T],System.Boolean])   包含通用参数

请协助。

0 个答案:

没有答案