我正在玩C#3.0的新内容,我有这个代码(主要来自MSDN),但我只能得到真,假,真......而不是真正的价值:
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var oddNumbers = numbers.Select(n => n % 2 == 1);
Console.WriteLine("Numbers < 5:");
foreach (var x in oddNumbers)
{
Console.WriteLine(x);
}
如何修复此问题以显示整数列表?
答案 0 :(得分:25)
将“选择”更改为“位置”
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var oddNumbers = numbers.Where(n => n % 2 == 1);
Console.WriteLine("Odd Number:");
foreach (var x in oddNumbers)
{
Console.WriteLine(x);
}
“Select”方法正在为每个元素创建一个新的lambda结果列表(true / false)。 “Where”方法基于lambda进行过滤。
在C#中,您也可以使用这种语法,您可以更清楚地看到它:
var oddNumbers = from n in numbers
where n % 2 == 1
select n;
编译器转换为:
var oddNumbers = numbers.Where(n => n % 2 == 1).Select(n => n);
答案 1 :(得分:5)
numbers.Select(n => n % 2 == 1);
将此更改为
numbers.Where(n => n % 2 == 1);
什么选择将一件事“转换”为另一件事。所以在这种情况下,它是“转换”n到“n%2 == 1”(这是一个布尔值) - 因此你得到了所有的真实和谬误。
它通常用于获取物品的属性。例如,如果你有一个Person
个对象的列表,并且你想得到他们的名字,你就可以
var listOfNames = listOfPeople.Select( p => p.Name );
你可以这样想:
要“选择”(在单词的“过滤”意义上)集合的子集,您需要使用Where。
感谢微软的糟糕命名