我正在尝试写下面的lambda,但我的语法不正确。
Result = ListOfNumbers.Where(val => { val != Num1; val != Num2; }).ToList()[0];
我得到的错误是
并非所有代码路径都返回type的lambda表达式中的值 'System.Func
<int,int,bool>
'
也许有更好的方法来做到这一点......我知道ListOfNumbers中有数字1,2和3(按此顺序)。此时Num1和Num2将分别为1,2或3(尽管它们不能相同)。我希望我的结果是ListOfNumbers中的“其他”数字。希望很清楚。如果你能想到一种更简洁的方式,我很乐意听到它。
有什么想法吗?
答案 0 :(得分:2)
您需要将其更改为
val => val != Num1 && val != Num2
如果我编写您提供的代码,因为它可能会看到错误:
public bool Predicate(int val)
{
val != Num1;
val != Num2;
}
即。 - 返回声明在哪里?
虽然 - 请注意,实际上无法使用错误Only assignment, call, increment, decrement, and new object expressions can be used as a statement
进行编译 - lambdas中的编译器规则略有不同,因此您会得到不同的错误,但最终出于同样的原因 - 在您的情况下你的lambda路径都没有返回任何东西。
答案 1 :(得分:1)
将lambda更改为:
ListOfNumbers.Where(val => val != Num1 && val != Num2)
答案 2 :(得分:1)
你真的想要这样做吗?
Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0];
另外,如果列表没有元素怎么办?在通过索引访问它之前,您应该更好地检查它。
答案 3 :(得分:1)
您收到错误,因为在Where子句中没有获得任何bool,您需要将lambda表达式更改为:
Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0];
答案 4 :(得分:0)
由于您的代码期望System.Func<int,int,bool>
委托返回布尔值,因为在where where中,您应该按以下方式定义它:
Result = ListOfNumbers.Where(val => { val != Num1 && val != Num2; }).ToList()[0];
答案 5 :(得分:0)
我想你想要产生这样的东西:
Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0];
答案 6 :(得分:0)
如果在lambda empression中创建一个块,则必须使用return
语句(如果lambda定义了结果类型)。
如果您只想要第一个元素,可以使用FirstOrDefault
代替Where
。
Result = ListOfNumbers.FirstOrDefault(val => val != Num1 && val != Num2 );
带一个块:
Result = ListOfNumbers.FirstOrDefault(val =>
{
var b = val != Num1 && val != Num2;
return b;
}
);
我用了&&
,但我真的不知道你的病情是什么......