
[英]how to pick up the gridview cell value to use in if statement within for loop
[英]How to use value assigned within a for loop
我在循环外声明变量setPassword
,然后在循环内给它一个值。 然后,在下一个do-while循环中,我尝试使用分配的值,但显示“使用未分配的局部变量”。
profile[I]
是在循环之前创建的对象数组。 在循环中分配的值是否未保存,或者profile[I].Password
的值是否为null,因为尚未创建对象?
bool good = false;
string username;
do
{
bool broke = false;
Console.WriteLine("Please create a username");
username = Console.ReadLine();
for (int i = 0; i < profile.Count; i++)
{
if (username == profile[i].Username)
{
Console.WriteLine("The username already exists");
broke = true;
break;
}
}
if (broke == false)
{
good = true;
}
} while (good == false);
Console.WriteLine("Please create a password");
string password = Console.ReadLine();
profile.Add(new Users(username, password, 0));
string setPassword;
bool validUser = false;
do
{
Console.Clear();
Console.WriteLine("Enter your username");
string tryUsername = Console.ReadLine();
for (int i = 0; i < profile.Count; i++)
{
if (profile[i].Username == tryUsername)
{
setPassword = profile[i].Password;
validUser = true;
}
}
if (validUser == false)
{
Console.WriteLine("Invalid username. Usernames are case sensitive");
Thread.Sleep(2500);
}
} while (validUser == false);
bool validPass = false;
do
{
Console.WriteLine("Enter your password");
string tryPass = Console.ReadLine();
if (tryPass == setPassword) //this is the error
{
validPass = true;
}
else
{
Console.WriteLine("Invalid password. Passwords are case sensitive");
}
} while (validPass == false);
编译器不知道它实际上会被赋值( if
您将if
语句评估为true
那么也不是全部)。
分配一个默认值,您就可以了:
string setPassword = null;
这是因为编译器不容知道你for
-loop执行至少一次,特别是, if
语句来内环路也至少经过该循环的一个迭代。 因此-至少从编译器的角度来看-可能永远不会为setPassword
分配值,因此您会收到该错误。
开始时分配null
:
string setPassword = null;
我在循环外启动变量setPassword,然后在循环内给它一个值。
这就是问题。 系统无法保证在使用值之前已为其分配了值。
循环可能会迭代0次。
if
语句周围的条件可能为false
。
这两种情况都导致setPassword
永远不会获得值。
因此,编译器会给您一个错误,有可能您在使用setPassword
之前没有它的值。
解决方案是在循环之外和if
之外将其设置为默认值。
基本上问题是这样的:您主要在if
语句中使用它们,而if
语句使用变量。 但是您只声明了但从未全局/局部定义变量,尽管变量将在本地接受用户的输入,但会自动给出错误,但是不幸的是, if
语句太愚蠢而无法为您检测到该变量,此外还存在以下可能性:用户也跳过提供输入的步骤。 因此,您需要设置一个默认值。 就像他们所说的一样,您可以使用: string setPassword = null;
或string setPassword = "";
[无需介意nullable,默认情况下字符串可以为null
]
要解决您的问题,应根据使用情况将setPassword
分配给string.Empty
, null
或其他一些值
如果您好奇- 为什么即使在while循环中为变量分配了值,编译器仍会抱怨该变量未分配?
这称为C#语言的“ 确定分配”行为。 如果满足以下条件,则认为变量已明确分配
有关更多信息,请参见MSDN上的“确定分配” 。 这是一个存档文件,但仍应是一个很好的参考。 DotNetPerls页面也以简单的语言对其进行了描述。
免责声明:我与DotNetPerls没有关联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.