LINQ,无法推断类型

LINQ,无法推断类型,linq,Linq,我目前正在学习LINQ,执行此查询时: public static class Linq { // Returns the given anonymous method as a lambda expression public static Expression<Func<Int32, Int32>> Expr<T, R>(Expression<Func<Int

我目前正在学习LINQ,执行此查询时:

public static class Linq
       {
           // Returns the given anonymous method as a lambda expression
           public static Expression<Func<Int32, Int32>>
              Expr<T, R>(Expression<Func<Int32, Int32>> f)
           {
               return f;
           }
           // Returns the given anonymous function as a Func delegate
           public static Func<T, R>
                 Func<T, R>(Func<T, R> f)
           {
               return f;
           }

   }

//main Fun

var expr = Linq.Expr((Int32 a, Int32 b) => a + b);
var fun = Linq.Func((int a, int b) => a + b);
公共静态类Linq
{
//以lambda表达式的形式返回给定的匿名方法
公共静态表达式
Expr(表达式f)
{
返回f;
}
//以Func委托的形式返回给定的匿名函数
公共静态函数
Func(Func f)
{
返回f;
}
}
//主要乐趣
var expr=Linq.expr((int32a,int32b)=>a+b);
var fun=Linq.Func((int a,int b)=>a+b);

我得到以下错误
Linq.Expr(System.Linq.Expressions.Expression)')无法从用法中推断。尝试显式指定类型参数。
错误。我做错了什么?

如果你想有两个输入参数和一个返回值,你需要使用一个
函数,即一个有三个参数。

我想你需要这样:

public static class Linq { 
// Returns the given anonymous method as a lambda expression 
public static Expression<Func<T1, T2, R>> 
                    Expr<T1, T2, R>(Expression<Func<T1, T2, R>> f) 
      { 
    return f; 
} 
// Returns the given anonymous function as a Func delegate 
public static Func<T1, T2, R> Func<T1, T2, R>(Func<T1, T2, R> f) 
{ 
    return f; 
}} 
公共静态类Linq{
//以lambda表达式的形式返回给定的匿名方法
公共静态表达式
Expr(表达式f)
{ 
返回f;
} 
//以Func委托的形式返回给定的匿名函数
公共静态Func Func(Func f)
{ 
返回f;
}} 
用法:

var expr = Linq.Expr<int, int, int>((a, b) => a + b);
var fun =  Linq.Func<int, int, int>((a, b) => a + b); 
var expr=Linq.expr((a,b)=>a+b);
var fun=Linq.Func((a,b)=>a+b);

您的
静态类Linq的成员在这里有什么意义?他们只是简单地返回传递给他们的东西。@AndrewBarber:不完全正确。试着在没有这些方法的情况下写最后两行。您需要执行强制转换或显式指定变量的类型。这些方法是实现这一点的捷径。“shorter to type”中的快捷方式:-@DanielHilgarth我说的是真的,但我明白你的意思-它们提供了一个具体的类型,让编译器知道如何处理
var
关键字。现在说得通了。:-)编辑:我发布的内容并不完整,从这个意义上讲,也不完全正确。是的:)@AndrewBarber:是的。我所说的“不完全正确”的意思是:它们不仅返回传递给它们的内容,而且还强制执行从lambda表达式到强类型变量的隐式转换——这才是真正的好处。