0

我正在尝试制作一个文本冒险类型的游戏,而且我对 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
4

3 回答 3

2
do{

    var answer3 = Console.ReadLine();


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

|| 意思是“或”

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

do{

 this

}while(this isn't true);
于 2013-11-09T18:36:05.700 回答
1

您可以使用while循环

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

如果您有多个想要的答案,您可以只ORwhile条件中使用它们

于 2013-11-09T18:37:01.343 回答
1

一种非常 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。s使用时将被列表的每个元素替换Any

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

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

更多关于lambda 表达式

于 2013-11-09T18:40:31.917 回答