C#如何检查文本框中的字符串是您想要的

C#如何检查文本框中的字符串是您想要的,c#,string,if-statement,textbox,equals,C#,String,If Statement,Textbox,Equals,用C#为大学制作一个石头剪刀游戏。 我想在玩家输入无效命令(不是石头、布或剪刀)时显示消息框。我试过了,但没能成功 //if player enters wrong command they will //this feedback if (textBoxAttack.Text != "rock" || textBoxAttack.Text != "rock" || textBoxAttack.Text != "paper" || textBox

用C#为大学制作一个石头剪刀游戏。 我想在玩家输入无效命令(不是石头、布或剪刀)时显示消息框。我试过了,但没能成功

        //if player enters wrong command they will 
        //this feedback
        if (textBoxAttack.Text != "rock" || textBoxAttack.Text != "rock" || textBoxAttack.Text != "paper" || textBoxAttack.Text != "Paper" || textBoxAttack.Text != "scissors" || textBoxAttack.Text != "Scissors")
        {
            MessageBox.Show("Not a valid attack"
                           + "\nPlease Enter one of the Following:"
                           + "\nrock"
                           + "\npaper"
                           + "\nscissors");
            textBoxAttack.Text = "";
        }
如果我只输入一个命令(例如:if(textBoxAttack.Text!=“rock”)),它就可以工作了

有什么建议吗?
谢谢。

使用
数组
,这会使您的工作更轻松。您还可以使用
ToLower
方法进行不区分大小写的检查


请改用下拉列表/单选按钮。

您的布尔逻辑是错误的,因为它始终不等于其中一个值,因此始终为真。将
|
更改为
&
,它应该可以工作。

您需要
&
而不是
|

然而,我更喜欢这种简明易懂的方法:

string[] allowed = { "rock", "paper", "scissors" };
if (!allowed.Contains(textBoxAttack.Text, StringComparer.CurrentCultureIgnoreCase))
{ 
    string msg = string.Format("Not a valid attack{0}Please Enter one of the Following:{0}{1}"
        , Environment.NewLine, string.Join(Environment.NewLine, allowed));
    MessageBox.Show(msg);
    textBoxAttack.Text = "";
}

使用组合框或3个按钮解决此类问题。

尝试执行相同的操作,但例如在每个文本属性的末尾添加ToLower()。这样,您只需要检查3(石头、布或剪刀),因为iput是小写;)

对于messageBox,请尝试以下内容:

string[] message = { "Not a valid attack", "Please Enter one of the Following:", "rock", "paper", "scissors" };

if (textBoxAttack.Text.ToLower() != "rock" && textBoxAttack.Text.ToLower() != "paper" && textBoxAttack.Text.ToLower() != "scissors")
    {
       MessageBox.Show(string.Join("\n", message));
       textBoxAttack.Text = "";
    }

您是否考虑过其他类型的输入?单选按钮、下拉列表?虽然我更喜欢Selman关于使用数组(
string[]
)的建议,但逻辑的实际问题是使用逻辑OR(
|
)运算符,而不是逻辑AND(
&&
)运算符。请考虑一下if语句。那怎么可能是假的呢?哦,该死的啊哈,我以为我在读==而不是!=xD我身边没有错误!;)谢谢你,大卫!;)修正你的答案,我将取消否决票。我不怎么投反对票,但如果答案是错的,这是一个很好的理由。然后,我也会删除我的评论,这样就不会有人知道发生了这种情况。:)不需要删除注释;)错误就是错误;)大卫,我从中学到了很多!谢谢你,你看起来是个好人。StackOverflow的一个很酷的功能是,你可以编辑你的答案,甚至删除它们。一个错误可能是一个错误,但这并不意味着你不能纠正它-事实上,你被鼓励这样做,在这种情况下,取消否决票将是正确的事情。我们都这么做了——我发布的答案有时偏离了基本点,得到了3张反对票,因此删除它们比解决问题更容易。没必要对自己太苛刻,老兄!答案已经确定,但是否决票请记住我需要更仔细地检查我的答案和问题这是学习的唯一途径。。犯错误!但是如果我们删除错误。。。我们不能向他们学习!
string[] allowed = { "rock", "paper", "scissors" };
if (!allowed.Contains(textBoxAttack.Text, StringComparer.CurrentCultureIgnoreCase))
{ 
    string msg = string.Format("Not a valid attack{0}Please Enter one of the Following:{0}{1}"
        , Environment.NewLine, string.Join(Environment.NewLine, allowed));
    MessageBox.Show(msg);
    textBoxAttack.Text = "";
}
if (textBoxAttack.Text == "rock" || textBoxAttack.Text == "Paper" || textBoxAttack.Text == "Scissors")
{
//..Do What do you want
}
else
{
MessageBox.Show("Not a valid attack"
                           + "\nPlease Enter one of the Following:"
                           + "\nrock"
                           + "\npaper"
                           + "\nscissors");
            textBoxAttack.Text = "";
}
string[] message = { "Not a valid attack", "Please Enter one of the Following:", "rock", "paper", "scissors" };

if (textBoxAttack.Text.ToLower() != "rock" && textBoxAttack.Text.ToLower() != "paper" && textBoxAttack.Text.ToLower() != "scissors")
    {
       MessageBox.Show(string.Join("\n", message));
       textBoxAttack.Text = "";
    }