在C#中使用if语句和OR运算符比较字符串

3

我是一个C#初学者,但似乎找不到任何关于这个问题的信息。这是我想做的事情:

string testString = txtBox1.Text;
string testString2 = txtBox2.Text;

if ((testString == "") || (testString2 == ""))
{
    MessageBox.Show("You must enter a value into both boxes");
    return;
} 

基本上,我需要检查txtBox1或txtBox2是否为空。 但是在运行此代码时,我收到了一个错误。 我该如何正确地执行此操作(或者我的方法是错误的)?


4
“Accept” 的意思是什么? - dlev
抱歉,我已经澄清了问题,我的原始问题并没有完全包括所有内容。在意识到它没有涵盖我真正遇到的问题之前,我按下了保存键。 - Ryan
6
错误在哪里? - Jeff Mercado
1
在您提供的代码示例中,if语句中缺少一个闭括号')'。 - Tibi
@Tibi:代码看起来没问题。 - Blaisorblade
@Blaisorblade 这是因为它被编辑过了。 - Tibi
6个回答

7

既然您想检查文本框是否包含任何值,您的代码应该可以完成此任务。对于您所遇到的错误,您应该更具体地描述。您还可以执行以下操作:

if(textBox1.Text == string.Empty || textBox2.Text == string.Empty)
   {
    MessageBox.Show("You must enter a value into both boxes");
   }

根据@JonSkeet的评论:

根据原始未编辑的帖子,不需要使用string.Compare。如果想比较字符串,则应该使用String.Equals方法,并且可以使用StringComparison来忽略大小写进行比较。string.Compare应该用于排序比较。最初,问题包含了这个比较。

string testString = "This is a test";
string testString2 = "This is not a test";

if (testString == testString2)
{
    //do some stuff;
}

if语句可以被替换成

if(testString.Equals(testString2))

或者按照忽略大小写的方式进行操作。
if(testString.Equals(testString2,StringComparison.InvariantCultureIgnoreCase)) 

3
我个人建议在进行“相等性比较”时使用“Equals”方法,毕竟这是它的本意。 - Jon Skeet
@JonSkeet,我同意,我对原始未编辑的帖子并不确定,如果OP想比较相等或者想忽略大小写比较字符串, - Habib
OP 比较的是字符串是否为空,为什么要在案例中添加呢?即使您想进行不区分大小写的比较,仍然可以使用带有 StringComparisonEquals,这比使用 Compare 更清晰。Compare 应该用于 顺序 比较,而不是相等性。我很惊讶这个答案已被接受,因为我看不出它如何回答 OP 提出的问题。 - Jon Skeet
@JonSkeet,那是我的误解,因为OP想要比较字符串,而不是空字符串。早些时候有两个带值的字符串变量,OP使用==进行比较,后来编辑的帖子指定了与空字符串进行比较。即使我对答案被接受感到惊讶。可能是由于编辑部分的比较textBox1.Text == string.Empty,但是还有其他使用Equals的答案更好。 - Habib
@JonSkeet,我不知道string.Equals可以用于忽略大小写比较字符串。那是我的错误,我已经更新了答案以反映这一点。 - Habib
显示剩余2条评论

3

这里有一种更有效的方法,还可以检查您的文本框是否只填充了空白。

// When spaces are not allowed
if (string.IsNullOrWhiteSpace(txtBox1.Text) || string.IsNullOrWhiteSpace(txtBox2.Text))
  //...give error...

// When spaces are allowed
if (string.IsNullOrEmpty(txtBox1.Text) || string.IsNullOrEmpty(txtBox2.Text))
  //...give error...

@Habib.OSU的编辑答案也可以,这只是另一种方法。


在您的评论中,'not' 的位置有误,如果方法名称有任何意义的话。我假设这是一个打字错误并编辑了答案,请纠正它如果当前的答案实际上是错误的(但请解释一下奇怪之处)。 - Blaisorblade
@Blaisorblade 不是的。在 OP 的代码中,当字符串为空或包含空格时,会抛出错误消息,所以如果字符串为空,则抛出错误如果字符串为空格,则抛出错误 - Code0987
我明白了,抱歉。我以为你已经实现了介绍部分。我已经添加了注释来澄清答案。 - Blaisorblade

1

尝试

if (testString.Equals(testString2)){
}

这是正确的,除了重复发布并在完全相同的时间发布之外,我不知道为什么有人会对此进行负面评价。别理那些混蛋,伙计。 - Eric Herlitz
问题不在于将两个字符串进行比较;代码应该检查它们中的任意一个是否为空。不过,原来的问题与此不同,这是一个合理的答案,所以可能不应该被点踩。 - Blaisorblade

1
提供的代码是正确的,我看不出为什么它不能工作。 您也可以尝试建议的if (string1.Equals(string2))
要执行if (something OR something else),请使用||
if (condition_1 || condition_2) { ... }

0

尝试:

    if (textBox1.Text == "" || textBox2.Text == "")
    {
        // do something..
    }

不要:

    if (textBox1.Text == string.Empty || textBox2.Text == string.Empty)
    {
        // do something..
    }

因为 string.Empty 与 - "" 不同。


0

使用 if (testString.Equals(testString2))


问题不在于将两个字符串相互比较;代码应该检查其中一个是否为空。尽管原始问题不同,但这是一个明智的答案,因此负评可能不合适。 - Blaisorblade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接