问题描述:

private void caseTextBox_TextChanged(object sender, EventArgs e)

{

var CTcase = caseTextBox.Text;

caseTextBox.CharacterCasing = CharacterCasing.Upper;

if (CTcase == "THRUHOLE")

{

displayLabel3.Text = "0";

}

else if (CTcase == "EIAA")

{

displayLabel3.Text = "1";

}

else if (CTcase == "EIAB")

{

displayLabel3.Text = "2";

}

else if (CTcase == "EIAC")

{

displayLabel3.Text = "3";

}

else if (CTcase == "EIAD")

{

displayLabel3.Text = "4";

}

else

{

displayLabel3.Text = "error";

}

}

In each statement there are 3 values that it could equal to display the correct number. But I don't want to write 15 if/else statements to make it work. I tried using ||, |, &, and &&. But I keep getting an error that says

Operator cannot be applied to operands of type 'bool' and 'string'

 private void caseTextBox_TextChanged(object sender, EventArgs e)

{

var CTcase = caseTextBox.Text;

caseTextBox.CharacterCasing = CharacterCasing.Upper;

if (CTcase == "THRUHOLE")

{

displayLabel3.Text = "0";

}

else if (CTcase == "EIAA" || "1206")

{

displayLabel3.Text = "1";

}

网友答案:

For example:

if (CTcase == "THRUHOLE" || CTcase == "something else") 
        {
            displayLabel3.Text = "0";
        }

But - for cases like this one - use enum. It's much more readable ! https://msdn.microsoft.com/pl-pl/library/sbbt4032.aspx

网友答案:

I'd rather eliminate all ifs (which look ugly when being in great number and complicated) and create a single dictionary instead:

Dictionary<String, String> labels = new Dictionary<String, String>() {
  {"THRUHOLE", "0"},
  {"EIAA", "1"},
  {"1206", "1"},
  {"EIAB", "2"},
  {"EIAC", "3"},
  {"EIAD", "4"},
};

...

String text;

if (labels.TryGetValue(CTcase, out text)) 
  displayLabel3.Text = text;
else
  displayLabel3.Text = "error";
网友答案:

There are two operators that will probably do the trick.

| is an or which will cause all statements in the if to be executed prior to evaluation.

|| is an or else which will cause the statements to be executed from left to right until a condition is met (at which point it stops testing further conditions).

In your case, you could do something like:

if (CTcase == "THRUHOLE" || CTcase == "some other value" || CTcase == "something else") 
{
    displayLabel3.Text = "0";
}
网友答案:

It sounds like you might be using || improperly. It has to be a full statement in itself.

such as:

if(CTcase == "THRUHOLE" || CTcase == "somethingelse")
{
    displaylabel3.Text = "0";
}
网友答案:

this should worki:

CTcase = caseTextBox.Text;

if (CTcase == "test" || CTcase  == "Test" || CTcase  == "TEST")
{

}

My way to check if there is just a "writing error" i would do the following:

CTcase = caseTextBox.Text.ToLower();

if (CTcase == "test")
{

}

But this only works if you don't want to make a differnce between "Test" and "test".

网友答案:

I think you can extend the method of string class like this

public static class StringExtension
{
    public static bool In(this string source, params string[] matches)
    {
        return matches.Contains(source);
    }
}

And then use it in your program, without worrying about to many if-clause

string displayLabel = string.Empty;
string CTcase = "EIAA";

if (CTcase.In("THRUHOLE"))
{
    displayLabel = "0";
}
else if (CTcase.In("EIAA", "1206"))
{
    displayLabel = "1";
}

I hope this may help you.

相关阅读:
Top