C#-有没有一种方法可以让你在接受或陈述的时候做些什么?

C#-有没有一种方法可以让你在接受或陈述的时候做些什么?,c#,menu,user-input,do-while,C#,Menu,User Input,Do While,我在自学一些C#并有了制作温度计算器的想法。我想使用do-while循环来确保用户选择一个有效的菜单选项。我想做的是: do { //etc etc etc; } (while menuChoice != 1||2||3); 换句话说,除非menuChoice是1、2或3,否则继续执行循环中的操作。VS2010 Express告诉我我不能这么做。有没有办法做到这一点,还是我必须做些别的?有没有关于如何做到这一点的建议,或者我应该使用其他解决方案 do { // stuff } while

我在自学一些C#并有了制作温度计算器的想法。我想使用do-while循环来确保用户选择一个有效的菜单选项。我想做的是:

do
{
  //etc etc etc;
} (while menuChoice != 1||2||3);
换句话说,除非menuChoice是1、2或3,否则继续执行循环中的操作。VS2010 Express告诉我我不能这么做。有没有办法做到这一点,还是我必须做些别的?有没有关于如何做到这一点的建议,或者我应该使用其他解决方案

do { // stuff
} while (menuChoice != 1 && menuChoice != 2 && menuChoice != 3);
连词的每个子句都必须是计算结果为
bool
的表达式。请注意,
!=2
不是计算结果为
bool
的表达式。事实上,这甚至不是一个合法的表达。这就是为什么必须指定
menuChoice!=2

另外,请注意,您应该使用
&&
,因为这些子句是。您希望
menuChoice
等于1,或等于2,或等于3。所以你想要

!(menuChoice == 1 || menuChoice == 2 || menuChoice == 3)
作为
while
循环中的条件。根据德摩根定律,这相当于

menuChoice != 1 && menuChoice != 2 && menuChoice != 3
编辑:

这个怎么样?这将允许您拥有一组非连续的数字,并且比拥有一百万个| |语句更具可扩展性…:

int[] menuOptions = { 1, 2, 3 };

或:

do{
//等等。
}而(menuChoice>3 | | menuChoice<1);
仅提供另一种解决方案:

使用System.Collections.Generic;//名单
做
{
}
而(!(新列表(new[]{1,2,3}))。包含(menuChoice));

是的,这不是最好的解决方案,但是,它是一种替代方案(如果选项列表增加,它会很有用)。

虽然它在技术上与op的伪代码相匹配,但您也可以编写
While(true)
它也不允许我使用&&但是我没有尝试使用类似的单独bool语句。我会放手的!您可以导入
System.Linq
,然后代码就是
new[]{1,2,3}.Contains(menuChoice)
@Gabe:correct.-不管是谁做的,为什么要投否决票?那是不是a)不起作用,b)偏离轨道,或者c)不是原始问题的解决方案?即使有免责声明,也无法获胜:叹气:不管怎样,这都是不必要的开销。可能是因为代码太多了。Rob的版本开销更小,IMHO更容易理解。@leppie:我从来没有说它是优化的,甚至是理想的,我只是展示了另一种方法。不仅如此,考虑到他们所处的水平,有时像这样的帖子会激发他们对
List
这样的图书馆的好奇心,让他们继续他们的教育之路。你从来没有搜索过一个答案,在搜索过程中看到一个库并说“哦,太好了”?我认为leppie有一个答案,你在声明这样的
int[]
时不需要
new int[]
。提示:如果选项增加很多,最好使用
HashSet
,比如说20个或更多。带有
开关的单独助手方法可能是最佳选择。
int[] menuOptions = { 1, 2, 3 };
while(!menuOptions.Contains(menuChoice))
do {
    // etc.
} while(menuChoice > 3 || menuChoice < 1);
using System.Collections.Generic; // for the List<T>
do
{
}
while (!(new List<Int32>(new[]{ 1, 2, 3 })).Contains(menuChoice));