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# 呼叫表达式_C#_Linq_Expression - Fatal编程技术网

C# 呼叫表达式

C# 呼叫表达式,c#,linq,expression,C#,Linq,Expression,我有: X类 { Y类 { 公共Y跳过(整数计数) { var mi=(MethodInfo)MethodBase.GetCurrentMethod(); var f=Expression.Call(null,mi,Expression.Constant(count)); var x=this.Provider.CreateQuery(f); 归还其他东西; } } } 我得到Y`1 Skip(Int32)包含泛型参数 无法使该方法成为泛型,因此我可以调用method.MakeGenericT

我有:

X类
{
Y类
{
公共Y跳过(整数计数)
{
var mi=(MethodInfo)MethodBase.GetCurrentMethod();
var f=Expression.Call(null,mi,Expression.Constant(count));
var x=this.Provider.CreateQuery(f);
归还其他东西;
}
}
}
我得到Y`1 Skip(Int32)包含泛型参数

无法使该方法成为泛型,因此我可以调用method.MakeGenericType

你知道我如何创建表达式吗

我还尝试:

class X<t1>
{
   class Y<t2>
   {

      public Y<t2> Skip(int count)
      {
          var mi = (MethodInfo)MethodBase.GetCurrentMethod();
          var f = Expression.Call(null, mi,Expression.Constant(count));
          var x = this.Provider.CreateQuery(f);
          return something_else;
      }
   }
}
var f=Expression.Call(typeof(Y),“Skip”,新类型[]{gt},Expression.Constant(count));
这次我得到:

类型“X
1+Y
1[t1,t2]”上不存在方法“Skip”。

这似乎有效:

var f = Expression.Call(typeof(Y<>), "Skip", new Type[] { gt }, Expression.Constant(count));
顺便说一下,
Type.EmptyTypes
相当于
新类型[0]

这似乎有效:

var f = Expression.Call(typeof(Y<>), "Skip", new Type[] { gt }, Expression.Constant(count));
顺便说一句,
Type.EmptyTypes
相当于
新类型[0]

,如所述,GetCurrentMethod不填充拥有当前方法的类型的泛型参数

相反,一个选项是使用:

var f = Expression.Call(
     Expression.Constant(this), 
     "Skip", 
     Type.EmptyTypes, 
     Expression.Constant(count));
MethodInfo mi=typeof(X.Y).GetMethod(“跳过”);
表达式f=表达式.Call(null,mi,表达式.Constant(count))
另外,第一个参数不应该是
null
,但这是一个单独的问题。

如所述,GetCurrentMethod不填充拥有当前方法的类型的泛型参数

相反,一个选项是使用:

var f = Expression.Call(
     Expression.Constant(this), 
     "Skip", 
     Type.EmptyTypes, 
     Expression.Constant(count));
MethodInfo mi=typeof(X.Y).GetMethod(“跳过”);
表达式f=表达式.Call(null,mi,表达式.Constant(count))

另外,第一个参数不应该是
null
,但这是一个单独的问题。

你能把它放到一个工作示例中吗?你能把它放到一个工作示例中吗?