C# lambda表达式从列表中获取项
我做了一个小应用程序来练习lambda表达式。我对使用这种技术还不熟悉,我想在我的日常编码中熟悉使用它们,因为我意识到它们有多强大 我制作了一个名为C# lambda表达式从列表中获取项,c#,C#,我做了一个小应用程序来练习lambda表达式。我对使用这种技术还不熟悉,我想在我的日常编码中熟悉使用它们,因为我意识到它们有多强大 我制作了一个名为Pet的类,每只宠物都有一个Name和一个Age我在Pet类中添加了4只宠物 我想使用Where和Select子句获取年龄为1岁的宠物的名字。但是,当我运行代码而不是返回宠物名称时,我会得到System.Collections.Generic.List 1[System.String] 我的代码如下 宠物班 class Pet {
Pet
的类,每只宠物都有一个Name
和一个Age
我在Pet
类中添加了4只宠物
我想使用Where
和Select
子句获取年龄为1岁的宠物的名字。但是,当我运行代码而不是返回宠物名称时,我会得到System.Collections.Generic.List 1[System.String]
我的代码如下
宠物班
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
程序类
var pets = new Pet[]
{
new Pet {Name="Sharo", Age=8 },
new Pet {Name="Rex", Age=4 },
new Pet {Name="Strela", Age=1 },
new Pet {Name="Bora",Age=1 }
};
p = pets.Where(pet => pet.Age == 1).Select(pet => pet.Name).ToList();
Console.WriteLine(p);
当您执行
ToList
时,您拥有List
相反,你可以这样做
foreach(var pet in p)
Console.WriteLine(p.Name)
当您执行
ToList
时,您拥有List
相反,你可以这样做
foreach(var pet in p)
Console.WriteLine(p.Name)
隐式调用objectp
的ToString()
方法,默认情况下,该方法返回类型名
改用
Console.WriteLine(String.Join(",", p));
代码的其余部分看起来完全正确
注意:如果您想进一步练习lambda,可以使用linq的聚合获得字符串concat:
Console.WriteLine(p.Aggregate((current, next) => current + ", " + next));
隐式调用objectp
的ToString()
方法,默认情况下,该方法返回类型名
改用
Console.WriteLine(String.Join(",", p));
代码的其余部分看起来完全正确
注意:如果您想进一步练习lambda,可以使用linq的聚合获得字符串concat:
Console.WriteLine(p.Aggregate((current, next) => current + ", " + next));
你期望的产量是多少?linq查询将返回结果的集合。在代码中,这将是名称的集合。您需要循环通过它来获得实际值。如果确定linq查询只返回一个结果,那么应该使用FirstOrDefault而不是ToList。这将为您提供结果集合的第一项可能您只需要一项,然后使用
first
或Single
(如果有多个,则抛出异常)<代码>字符串petname=pets.First(p=>p.Age==1).Name代码>。注意,这会抛出一个nullreferenceexception
如果没有异常,您可以使用Console.WriteLine(pets.FirstOrDefault(p=>p.Age==1)?.Name)代码>如果要练习Lambda表达式(委托类型或表达式类型)。我的建议是实现您自己的Where、Select、GroupBy。。。方法扩展。lambda比LINQ有用得多。基本的实现是linq方法并不是那么难实现。你期望得到什么样的输出?linq查询将返回结果的集合。在代码中,这将是名称的集合。您需要循环通过它来获得实际值。如果确定linq查询只返回一个结果,那么应该使用FirstOrDefault而不是ToList。这将为您提供结果集合的第一项可能您只需要一项,然后使用first
或Single
(如果有多个,则抛出异常)<代码>字符串petname=pets.First(p=>p.Age==1).Name代码>。注意,这会抛出一个nullreferenceexception
如果没有异常,您可以使用Console.WriteLine(pets.FirstOrDefault(p=>p.Age==1)?.Name)代码>如果要练习Lambda表达式(委托类型或表达式类型)。我的建议是实现您自己的Where、Select、GroupBy。。。方法扩展。lambda比LINQ有用得多。而基本的实现方式是linq方法并不是那么难实现。