在复杂对象类型列表中搜索项目
本文关键字:搜索 项目 列表 类型 复杂 对象 | 更新日期: 2023-09-27 18:36:07
>我有一个名为User类型的用户的列表,我使用userID搜索了特定用户,并且我正在获取该用户的详细信息,但我希望搜索的用户存储在用户类型变量中,以便我可以将该特定用户传递给将用户类型作为参数的方法。我可以这样做吗?请帮忙。谢谢。
我的代码:
List<User> users = new List<User>();
public void SearchUser()
{
Console.WriteLine("Enter user id");
int userID = Convert.ToInt32(Console.ReadLine());
var details = users.Where(i => i.ID == userID);
Console.WriteLine("User Details are:");
foreach (var item in details)
{
Console.WriteLine(item.Name);
Console.WriteLine(item.Location);
}
User user = (User)details; //Here it throws exception, can I get the searched user as User type, so that I could pass it in the WritePost method
}
public void WritePost(User user)
{
//Code Here
}
details
的类型是List<User>
,所以你不能投射到User
。
我可能会做这样的事情:
List<User> users = new List<User>();
public void SearchUser()
{
Console.WriteLine("Enter user id");
int userID = Convert.ToInt32(Console.ReadLine());
var user = users.Where(i => i.ID == userID).SingleOrDefault();
if(user == null)
{
Console.WriteLine("User not found");
return;
}
Console.WriteLine("User Details:");
Console.WriteLine(user.Name);
Console.WriteLine(user.Location);
}
您需要
使用 First
/FirstOrDefault
或 Single
/SingleOrDefault
从列表中获取单个用户。
var user = users.Where(i => i.ID == userID).First();
或更短:
var user = users.First(i=> i.ID == userID);
记得:
First => 如果没有,它将返回第一项或引发异常 被发现
FirstOrDefault => 如果未找到任何项,则返回第一项或 null
var user = users.FirstOrDefault(i=> i.ID == userID);
if(user == null)
Console.WriteLine("User not found");
由于您是针对 ID 进行查询,因此最好使用 Single/SingleOrDefault
,因为如果从查询返回多个项目,它会引发异常。