C# 在列表中查找类值
用户将输入带有C# 在列表中查找类值,c#,C#,用户将输入带有姓名、年龄和地址的Lis,即 PeopleList.Add(new People { Name = name, Age = age, Address = address }); 完成PeopleList后,用户可以搜索姓名,并查看年龄和地址 我在如何在PeopleList中搜索特定的名称方面遇到问题 string searchName = Console.ReadLine(); if (PeopleList.Contains(new Peopl
姓名
、年龄
和地址
的Lis
,即
PeopleList.Add(new People {
Name = name,
Age = age,
Address = address
});
完成PeopleList
后,用户可以搜索姓名
,并查看年龄
和地址
我在如何在PeopleList
中搜索特定的名称方面遇到问题
string searchName = Console.ReadLine();
if (PeopleList.Contains(new People {
Name = searchName
})) {
//Display name, age, address here
} else {
Console.WriteLine("Name not found");
}
如果存在第一个元素,请使用LinqFirstOrDefault()
确定第一个元素
string searchName = Console.ReadLine();
People result = PeopleList.FirstOrDefault(x => x.Name == searchName);
if (result != null)
{
Console.WriteLine("name: {0}, age: {1}, address:{2}", result.Name, result.Age, result.Address);
}
else
{
Console.WriteLine("Name not found");
}
您可以尝试在Linq的帮助下查询集合
如果您不想显示找到的第一个项目而是所有项目,您可以加入它们:
string result = string.Join(Environment.Newline, PeopleList
.Where(item => item.Name == searchName)
.Select(found => $"Name: {found.Name}; Age: {found.Age}; Address: {found.Address}")
);
result = string.IsNullOrEmpty(result)
? "Name not found"
: result;
Console.Write(result);
发生了什么事
Contains
的签名是公共静态bool Contains(…)代码>并且它只给你一个是/否的答案。为了显示匹配对象,您需要返回匹配对象的方法之一,而不仅仅是找到匹配对象时返回是/否。这些方法包括Where
、First
、FirstOrDefault
、Single
、SingleOrDefault
,等等
注意:该类应称为Person
,因为它表示关于一个人的数据,而不是关于多个人的数据
Person person;
List<Person> people;
测验
密码
输出
使用System.LinqPeopleList.Find(p=>p.Name==searchName)
。多个同名条目如何?由于您没有使用linq标记,您是否考虑过在集合上使用循环?和名字比较?不太合适,但要小心!当您在此行中使用contains方法时:PeopleList.contains(新人员{…
您为它提供了一个全新的人
实例。由于您没有指定比较方法,contains将比较每个实例与新实例的相等性。它不会比较变量名称
!此语句将始终返回false
Person person;
List<Person> people;
var searchName = Console.ReadLine();
var results = PeopleList
.Where(x => x.Name.Contains(searchName, StringComparison.InvariantCultureIgnoreCase))
.ToList();
if (results.Any())
{
foreach (var person in results)
{
Console.WriteLine($"Found: {person.Name}");
}
}
else
{
Console.WriteLine("Name not found");
}
class Person { public string Name { get; set; } }
public static void Main(string[] args)
{
var PeopleList = new[] { new Person { Name = "marneee" }, new Person { Name = "Mark" } };
while (true)
{
var searchName = Console.ReadLine();
var results = PeopleList
.Where(x => x.Name.Contains(searchName, StringComparison.InvariantCultureIgnoreCase))
.ToList();
if (results.Any())
{
foreach (var person in results)
{
Console.WriteLine($"Found: {person.Name}");
}
}
else
{
Console.WriteLine("Name not found");
}
}
}
// .NETCoreApp,Version=v3.0
mar
Found: marneee
Found: Mark
marn
Found: marneee