Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 任何方法调用都会引发异常_C#_Linq_Expression - Fatal编程技术网

C# 任何方法调用都会引发异常

C# 任何方法调用都会引发异常,c#,linq,expression,C#,Linq,Expression,我正在研究使用表达式的过滤机制,不知道如何使用Expression.call调用任何方法。下面是一个没有意义的例子,但它说明了我的问题: var person = new List<String>(new[] { "Peter", "John", "Jim" }); var personQuery = person.AsQueryable(); var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method

我正在研究使用表达式的过滤机制,不知道如何使用Expression.call调用任何方法。下面是一个没有意义的例子,但它说明了我的问题:

var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();

var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);

Expression<Func<String, bool>> expr = p => p == "Amy";

// person.Any(person => person == "Amy"
var call = Expression.Call(
    anyMethod,
    personQuery.Expression,
    expr
);

anyMethod
变量将包含泛型方法定义。即
Any
在调用它之前,需要将其转换为
Any

您可以通过调用
anyMethod.MakeGenericMethod
提供
typeof(String)
参数来实现。所以你的代码变成了

var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();

var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);
var specificMethod = anyMethod.MakeGenericMethod(typeof(String));//<--Important
Expression<Func<String, bool>> expr = p => p == "Amy";

// person.Any(person => person == "Amy"
var call = Expression.Call(
    specificMethod,
    personQuery.Expression,
    expr
);
var person=新列表(新[]{“彼得”、“约翰”、“吉姆”});
var personQuery=person.AsQueryable();
var anyMethod=typeof(Queryable).GetMethods().FirstOrDefault(method=>method.Name==“Any”&&method.GetParameters().Count()==2);
var specificMethod=anyMethod.MakeGenericMethod(typeof(String));//p==“艾米”;
//person.Any(person=>person==“艾米”
var call=Expression.call(
具体方法,,
personQuery.Expression,
expr
);

您能为我们将异常消息文本翻译成英语吗?异常消息已翻译。
var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();

var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);
var specificMethod = anyMethod.MakeGenericMethod(typeof(String));//<--Important
Expression<Func<String, bool>> expr = p => p == "Amy";

// person.Any(person => person == "Amy"
var call = Expression.Call(
    specificMethod,
    personQuery.Expression,
    expr
);