C# 循环,直到给出有效答案



我正在尝试制作文本冒险类型的游戏,我对C#很陌生。我在网上搜索了大约半个小时,没有找到任何有效的方法。我想做一些在输入有效答案之前不会继续的东西

这是一个示例:

var answer3 = Console.ReadLine();
if (answer3.Equals("1"))
{
   Console.WriteLine("ans 1");
}
else if (answer3.Equals("2"))
{
   Console.WriteLine("Ans 2");
}
else
{
   Console.WriteLine("Answer decision 1,2, or 3"); //This is what I need repeated

一种非常C#/.Net的方法是使用Lambda表达式。您在数组中定义有效值的列表,它将循环,直到您获得这些值之一。

string myString = "";
string[] validValues = new string[] { "1", "2", "3" };
while (!validValues.Any(myString.Equals))
    myString = Console.ReadLine();

它相当于:

string myString = "";
string[] validValues = new string[] { "1", "2", "3" };
while (!validValues.Any(s=>myString.Equals(s))
    myString = Console.ReadLine();
switch (myString)
{
    case "1":
        Console.WriteLine("ans 1");
        break;
    case "2":
        Console.WriteLine("ans 2");
        break;
    case "3":
        Console.WriteLine("ans 3");
        break;
 }

如果括号中的条件传递给任何元素,validValues.Any将返回 true。Lambda 表达式s=>myString.Equals(s)几乎就像一个函数,当参数s等于 myString 时,它将返回 true。 使用 Any 时,s将被列表的每个元素替换。

在这种情况下,重要的是要注意=>并不意味着更大或相等。这意味着您定义了一个函数/表达式,该函数/表达式将s作为参数并返回myString.Equals(s) 。然后你把它传递给Any,它会把它应用于每个元素,直到一个返回true。如果没有返回 true,Any将返回false

Lambda 表达式是 C# 的一个非常简洁的功能,当你习惯它时,它将允许你编写比C++等语言简单得多的代码。由于我们大多数人花费大量时间编写样板代码或操作从各种来源获得的数据,因此它可以使我们的生活更加轻松。

有关 lambda 表达式的更多信息

do{
    var answer3 = Console.ReadLine();

}while(answer3 != "something" || answer3 != "something else");

|| 表示"或"

do- while 基本上至少执行一次,直到某些条件为真,while。

do{
 this
}while(this isn't true);

您可以使用 while 循环

string answer = Console.ReadLine();
while(!String.Equals(answer, desiredAnswer)
{
  Console.WriteLine("Answer decision 1,2, or 3");
  answer = Console.ReadLine();  
}

如果您有多个所需的答案,则可以在while条件下OR它们

最新更新