很抱歉,如果问题是noobish,不知道google什么,什么也没发现,我有一个控制台应用程序,从用户那里获取密码,并将其设置在一个文件上。我想确保用户输入密码并不要将其留空(只需按Enter键)。如果他没有输入任何东西 应用程序一次又一次地问他密码,直到他输入somthing 。
bool isitempty = true;
while (isitempty)
{
var passwordFile = Console.ReadLine();
if (passwordFile == "")
{
Console.WriteLine("sorry, type again");
}
else
{
zip.Password = String.Format("{0}", passwordFile);
}
isitempty = false;
}
我跑了这个,但它只询问一次,如果用户再次将其留空,它将通过此步骤。
答案 0 :(得分:1)
对代码进行最简单的更改以修复问题,即将isitempty = false;
语句移到else
块中:
....
else
{
zip.Password = String.Format("{0}", passwordFile);
isitempty = false;
}
}
“更好”(在我看来)重写将是重构代码,如下所示:
string passwordFile = string.Empty;
while (string.IsNullOrWhiteSpace(passwordFile))
{
passwordFile = Console.ReadLine();
if (string.IsNullOrWhiteSpace(passwordFile))
Console.WriteLine("sorry, type again");
}
zip.Password = passwordFile;
这样:
string.Format
时,您不需要{0}
,只需直接使用参数(只要它是一个字符串)注意我对您的代码所做的一项更改,我将“必须输入内容”解释为“不允许只有空格”。如果这不正确,并且密码确实只包含空格,则应替换两次出现的
string.IsNullOrWhiteSpace(passwordFile)
用这个:
string.IsNullOrEmpty(passwordFile)
双重说明:如果.NET Framework早于4.0,则必须使用string.IsNullOrEmpty
,因为{4.0}首次在.NET 4.0中引入。
答案 1 :(得分:0)
static void Main(string[] args)
{
string password = null;
do
{
Console.Write("Password: ");
password = Console.ReadLine();
}
while (string.IsNullOrWhiteSpace(password));
// do something with the password
}