如果使用C#,如何打破if-else-

时间:2015-06-14 06:33:55

标签: c# if-statement

我如何打破if-else-if .....为什么它不起作用?它只是检查所有条件而不是执行任务。以下是我的代码。我已经通过断点检查了它是否符合所有条件,为什么它在满足正确条件后不会停止。即使它没有进入if活动,它只是阅读了所有条件,最后什么都不做。

private void ShowHash()
    {
        inpic = pb_selected.Image;
        Bitmap image = new Bitmap(inpic);
        byte[] imgBytes = new byte[0];
        imgBytes = (byte[])converter.ConvertTo(image, imgBytes.GetType());
        string hash = ComputeHashCode(imgBytes);
        txt_selectedText.Text = hash;
        GetHash();
    }

private void GetHash()
    {
        if (txt_sel1.Text == null && (txt_sel2.Text == null || txt_sel3.Text == null || txt_sel4.Text == null || txt_sel5.Text == null ))
        {
            txt_sel1.Text = txt_selectedText.Text;
            return;
        }

        else if (txt_sel1.Text != null && (txt_sel2.Text == null || txt_sel3.Text == null || txt_sel4.Text == null || txt_sel5.Text == null))
        {
            txt_sel2.Text = txt_selectedText.Text;
            return;
        }

        else if (txt_sel2.Text != null && (txt_sel3.Text == null || txt_sel4.Text == null || txt_sel5.Text == null))
        {
            txt_sel3.Text = txt_selectedText.Text;
            return;
        }

        else if (txt_sel3.Text != null && (txt_sel4.Text == null || txt_sel5.Text == null))
        {
            txt_sel4.Text = txt_selectedText.Text;
            return;
        }

        else if (txt_sel4.Text != null && (txt_sel5.Text == null))
        {
            txt_sel5.Text = txt_selectedText.Text;
            return;
        }


    }

6 个答案:

答案 0 :(得分:5)

我强烈怀疑问题是Text属性永远不会是null txt_sel*。假设这些是用户界面中的文本框,如果文本框中没有文字,那么Text属性将返回""而不是{{1 }}。这就是大多数UI框架处理空控件的方式。

我还建议首先将条件提取到局部变量中:

null

理想情况下,为控件提供更有意义的名称 - 具有相同前缀的变量集合,但就可读性而言,数字后缀很少是一个好主意。

答案 1 :(得分:1)

<强>原因:

如果这些文本框中没有任何内容,textbox.Text将返回空字符串("")而不是null

<强>解决方案:

检查""而非null

private void GetHash()
{
    if (txt_sel1.Text == "" && (txt_sel2.Text == "" || txt_sel3.Text == "" || txt_sel4.Text == "" || txt_sel5.Text == ""))
    {
        txt_sel1.Text = txt_selectedText.Text;
        return;
    }

    else if (txt_sel1.Text != "" && (txt_sel2.Text == "" || txt_sel3.Text == "" || txt_sel4.Text == "" || txt_sel5.Text == ""))
    {
        txt_sel2.Text = txt_selectedText.Text;
        return;
    }
    ....
    ....

编辑:您不必为布尔变量执行==true。如果语句默认情况下将其检查为true。使用!检查false

if (hasValue1 && (hasValue2 || hasValue3 || hasValue4 || hasValue5))
    {
        txt_sel1.Text = txt_selectedText.Text;
        return;
    }

    else if (hasValue2 && (!hasValue1 ||hasValue3 || hasValue4 || hasValue5))
    {                
            txt_sel2.Text = txt_selectedText.Text;
            return;
    }

    else if (hasValue3 && (!hasValue1 || hasValue2 || hasValue4 || hasValue5))
    {               
            txt_sel3.Text = txt_selectedText.Text;
            return;                
    }
    ....
    ....

答案 2 :(得分:1)

我认为for string更好地使用inbuild null和空格检查功能:

bool hasValue1 = string.IsNullOrWhiteSpace(txt_sel1.Text);
bool hasValue2=  string.IsNullOrWhiteSpace(txt_sel2.Text);
bool hasValue3=  string.IsNullOrWhiteSpace(txt_sel3.Text);
bool hasValue4=  string.IsNullOrWhiteSpace((txt_sel4.Text);
bool hasValue5 =  string.IsNullOrWhiteSpace(txt_sel5.Text);

然后定义这些bool的条件。这种情况可以处理意外的空值或空格值。

答案 3 :(得分:0)

这是因为它可能没有找到任何这些条件。

如果它找到一个真实条件,它将执行if if block并赢得事件检查其他事件。

答案 4 :(得分:0)

要添加其他人所说的话,你应该在那里找到最后的其他声明来解决这样的问题:

else 
{
  throw new InvalidOperationException("My If Statement is Broken");
}

答案 5 :(得分:0)

谢谢大家!我的问题通过更改条件和建议的更改来解决,以下代码可能会像我一样帮助初学者。

 private void GetHash()
    {
        bool hasValue1 =  string.IsNullOrWhiteSpace(txt_sel1.Text);
        bool hasValue2 =  string.IsNullOrWhiteSpace(txt_sel2.Text);
        bool hasValue3 =  string.IsNullOrWhiteSpace(txt_sel3.Text);
        bool hasValue4 =  string.IsNullOrWhiteSpace(txt_sel4.Text);
        bool hasValue5 =  string.IsNullOrWhiteSpace(txt_sel5.Text);

        if (hasValue1 && (hasValue2 || hasValue3 || hasValue4 || hasValue5))
        {
            txt_sel1.Text = txt_selectedText.Text;
            return;
        }

        else if (hasValue2 && (!hasValue1 ||hasValue3 || hasValue4 || hasValue5 ))
        {                
                txt_sel2.Text = txt_selectedText.Text;
                return;
        }

        else if (hasValue3 && (!hasValue1 || !hasValue2 || hasValue4 || hasValue5 ))
        {               
                txt_sel3.Text = txt_selectedText.Text;
                return;                
        }

        else if (hasValue4 && (!hasValue1 || !hasValue2 || !hasValue3 || hasValue5 ))
        {
                txt_sel4.Text = txt_selectedText.Text;
                return;
        }

        else if (hasValue5 && (!hasValue1 || !hasValue2 || !hasValue3 || !hasValue4 ))
        {
            txt_sel5.Text = txt_selectedText.Text;
            return;
        }
        else
        {
            CompareHash();
        }


    }