0

我有一个名为 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
       }
4

2 回答 2

3

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);
}
于 2013-10-19T18:01:35.977 回答
2

您需要使用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,因为如果从查询返回多个项目,它将引发异常。

于 2013-10-19T18:00:48.713 回答