C# lambda表达式从列表中获取项

C# lambda表达式从列表中获取项,c#,C#,我做了一个小应用程序来练习lambda表达式。我对使用这种技术还不熟悉,我想在我的日常编码中熟悉使用它们,因为我意识到它们有多强大 我制作了一个名为Pet的类,每只宠物都有一个Name和一个Age我在Pet类中添加了4只宠物 我想使用Where和Select子句获取年龄为1岁的宠物的名字。但是,当我运行代码而不是返回宠物名称时,我会得到System.Collections.Generic.List 1[System.String] 我的代码如下 宠物班 class Pet {

我做了一个小应用程序来练习lambda表达式。我对使用这种技术还不熟悉,我想在我的日常编码中熟悉使用它们,因为我意识到它们有多强大

我制作了一个名为
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)
隐式调用object
p
ToString()
方法,默认情况下,该方法返回类型名

改用

Console.WriteLine(String.Join(",", p));
代码的其余部分看起来完全正确

注意:如果您想进一步练习lambda,可以使用linq的聚合获得字符串concat:

Console.WriteLine(p.Aggregate((current, next) => current + ", " + next));
隐式调用object
p
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方法并不是那么难实现。