Ce code génère une exception sur la ligne marquée:
using System;
using System.Linq.Expressions;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Action<int, int> a = (x, y) => Console.WriteLine(x + y);
ParameterExpression p1 = Expression.Parameter(typeof(int), "p1");
ParameterExpression p2 = Expression.Parameter(typeof(int), "p2");
// Here is the exception ArgumentNullException.
MethodCallExpression call = Expression.Call(a.Method, p1, p2);
}
}
}
Maintenant, j'ai testé ce code dans VS2013 (fonctionne comme un charme) et dans VS2015 de la Communauté (lève l'exception).
J'ai suivi les .Net de Source de Référence, ce qui m'a conduit à certains code condition qui checkes si l'fournis méthode IsStatic
ou pas.
Dans mon cas, la méthode que j'ai pass (a.Method
) est statique dans VS2013 et pour une raison non statique (exemple) dans VS2015. Si non, il se lève, me disant que je n'ai pas l'approvisionnement de l' Instance
argument.
Pourquoi est-il si? Comment cela peut-il être évité afin qu' Expression.Call
serait de commencer à travailler à nouveau dans Visual Studio?