4

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

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

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

3 回答 3

11

不,return i < 3不一样if (i < 3) return;

相反,它相当于:

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

换句话说,它返回 的评估结果i < 3i因此,如果为 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;
}
于 2010-04-30T09:08:29.813 回答
1

如您所说,return 语句只能返回一个值。在这个例子中,语句 i<3 将首先被评估为真或假,并且将返回布尔值,它不会返回 i<3,而是等式的结果。

于 2010-04-30T09:09:50.287 回答
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);
于 2010-04-30T11:30:13.337 回答