在 if 语句中分配变量 c#
assigning variables in if statements c#
我的问题是:我正在为涉及用户身份验证的 c# 编写控制台应用程序。我已经声明了一个用户 class 并将所有现有用户放在一个列表中。我有这个块来查看用户的输入是否与登录序列中的现有用户名匹配。
User CurrentUser;
for (int i = 0; i < users.Count; i++)
{
if (UsernameLogonInput == users[i].Name)
{
nameExists = true;
CurrentUser = users[i];
}
}
一切都很好,但后来,我有了这个块,用于登录。
if (nameExists)
{
bool isValid = false;
do
{
Console.Write("Enter Password : ");
string input = Console.ReadLine();
if (input == CurrentUser.Password)
{
isValid = true;
}
else
{
Console.WriteLine("INVALID. EC102");
}
} while (!isValid);
}
我遇到的问题是 visual studio 在第二个块中对 CurrentUser.Password
说 "use of an unassigned local variable"。我很确定这是因为 CurrentUser 是在 if 语句中分配的,我想知道是否有任何方法可以解决这个块范围问题。
您可以通过在声明变量时对其进行初始化来轻松解决该问题,即使它是 null 或空值也是如此。例如:
User CurrentUser = null;
但是当您必须这样做时,这可能表明有一些更好的方法来排序您的逻辑。例如,而不是所有这些:
User CurrentUser;
for (int i = 0; i < users.Count; i++)
{
if (UsernameLogonInput == users[i].Name)
{
nameExists = true;
CurrentUser = users[i];
}
}
...你可以这样写:
//using System.Linq;
User CurrentUser = users.SingleOrDefault( u => u.Name == UsernameLogonInput );
如果找到 none,这会将变量初始化为匹配的用户或 null。
SingleOrDefault 是 System.Linq 命名空间的扩展方法。它接受一个表达式作为参数,并将搜索列表并找到匹配的任何单个记录,如果不匹配则为 default/null。参数是一个 lambda 表达式。
我的问题是:我正在为涉及用户身份验证的 c# 编写控制台应用程序。我已经声明了一个用户 class 并将所有现有用户放在一个列表中。我有这个块来查看用户的输入是否与登录序列中的现有用户名匹配。
User CurrentUser;
for (int i = 0; i < users.Count; i++)
{
if (UsernameLogonInput == users[i].Name)
{
nameExists = true;
CurrentUser = users[i];
}
}
一切都很好,但后来,我有了这个块,用于登录。
if (nameExists)
{
bool isValid = false;
do
{
Console.Write("Enter Password : ");
string input = Console.ReadLine();
if (input == CurrentUser.Password)
{
isValid = true;
}
else
{
Console.WriteLine("INVALID. EC102");
}
} while (!isValid);
}
我遇到的问题是 visual studio 在第二个块中对 CurrentUser.Password
说 "use of an unassigned local variable"。我很确定这是因为 CurrentUser 是在 if 语句中分配的,我想知道是否有任何方法可以解决这个块范围问题。
您可以通过在声明变量时对其进行初始化来轻松解决该问题,即使它是 null 或空值也是如此。例如:
User CurrentUser = null;
但是当您必须这样做时,这可能表明有一些更好的方法来排序您的逻辑。例如,而不是所有这些:
User CurrentUser;
for (int i = 0; i < users.Count; i++)
{
if (UsernameLogonInput == users[i].Name)
{
nameExists = true;
CurrentUser = users[i];
}
}
...你可以这样写:
//using System.Linq;
User CurrentUser = users.SingleOrDefault( u => u.Name == UsernameLogonInput );
如果找到 none,这会将变量初始化为匹配的用户或 null。
SingleOrDefault 是 System.Linq 命名空间的扩展方法。它接受一个表达式作为参数,并将搜索列表并找到匹配的任何单个记录,如果不匹配则为 default/null。参数是一个 lambda 表达式。