我有一个名为User类型的用户列表,我搜索了具有userID的特定用户,我正在获取该用户的详细信息,但我希望搜索到的用户存储在用户类型变量中,这样我就可以将该特定用户传递给将User type作为参数的方法。我可以这样做吗?请帮忙。感谢。
我的代码:
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
}
答案 0 :(得分:3)
您需要使用First
/ FirstOrDefault
或Single
/ SingleOrDefault
从列表中获取单个用户。
var user = users.Where(i => i.ID == userID).First();
或更短:
var user = users.First(i=> i.ID == userID);
记住:
First =&gt;如果没有,它将返回第一个项目或抛出异常 找到了
FirstOrDefault =&gt;返回第一个项目,如果没有找到则返回null
var user = users.FirstOrDefault(i=> i.ID == userID);
if(user == null)
Console.WriteLine("User not found");
由于您要查询ID,因此如果使用Single/SingleOrDefault
会更好,因为如果从查询返回多个项目,它会抛出异常。
答案 1 :(得分: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);
}