LINQ,无法推断类型
我目前正在学习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
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表达式到强类型变量的隐式转换——这才是真正的好处。