在复杂对象类型列表中搜索项目

本文关键字:搜索 项目 列表 类型 复杂 对象 | 更新日期: 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/FirstOrDefaultSingle/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 ,因为如果从查询返回多个项目,它会引发异常。