谓词<int>匹配问题</int>

时间:2010-04-30 09:05:41

标签: c# syntax anonymous-methods predicate

我不明白以下代码是如何工作的。具体来说,我不明白使用“return i&lt; 3”。我希望返回i IF&lt;我总是认为返回只返回值。我甚至找不到它的语法。

第二个问题,在我看来,使用匿名方法(委托(int i))但是可以用普通委托指向方法else来编写它吗?感谢

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 };
List<int> result =
    listOfInts.FindAll(delegate(int i) { return i < 3; });

3 个答案:

答案 0 :(得分:11)

不,return i < 3if (i < 3) return;不同。

相反,它相当于:

bool result = (i < 3);
return result;

换句话说,它返回i < 3的评估结果。因此,如果i为2,则返回true,但如果i为10,则返回false。

你绝对可以使用方法组转换来写这个:

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 };
List<int> result = listOfInts.FindAll(TestLessThanThree);

...
static bool TestLessThanThree(int i)
{
    return i < 3;
}

答案 1 :(得分:1)

return语句只能返回你说的值。在这个例子中,语句i&lt; 3将首先被评估为true或false,并且将返回布尔值,它将不返回i <3,而是返回等式的结果。

答案 2 :(得分:1)

您也可以使用lambda表达式编写示例:

var listOfInts = new List<int> { 1, 2, 3, 4, 5 };
var result = listOfInts.FindAll(i => i < 3);

其他有趣的例子:

var listOfInts = new List<int> { 1, 2, 3, 4, 5 };
var all = listOfInts.FindAll(i => true);
var none = listOfInts.FindAll(i => false);