即使条件满足,也会跳过C#if语句

时间:2016-06-03 07:07:22

标签: c# if-statement

我正在为学校写一个关于c#的基本程序,并且遇到条件得到满足的if语句有问题,但代码被跳过,好像条件没有得到满足。

//this runs when i select a cell on the dataGridView
private void dataGridView1_CellClick(object sender,DataGridViewCellEventArgs e)
{    

    string estado = "";
    if (e.RowIndex >= 0)
    {
        DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
        id_lbl.Text = row.Cells[0].Value.ToString();
        nombre_lbl.Text = row.Cells[1].Value.ToString();
        apellido_lbl.Text = row.Cells[2].Value.ToString();
        estado = row.Cells[7].Value.ToString();
    }

    id_lbl.Visible = true;
    nombre_lbl.Visible = true;
    apellido_lbl.Visible = true;

    if(estado == "Activo")
    {
        baja_btn.Enabled = true;
    }
    else if (estado == "NoActivo")
    {
        alta_btn.Enabled = true;
    }
    else
    {
        MessageBox.Show(estado);
    }
}

代码运行但如果语句直接跳转到else代码并且消息框显示Activo,那么baja_btn.Enabled = true;不会运行。 如果我用NoActivo选择行,情况也是如此。如果直接跳到其他地方......

注意:在进入if语句之前,estado的ACTUAL值是Activo。所以它应该进入第一个条件,但它一直跳到其他地方..

1 个答案:

答案 0 :(得分:1)

两个string不相等。要查看位置和原因,让我们尝试调试报告(就在if之前):

  ... 

  String report = String.Format(
    "Tested [{0}] encoded {1} of length {2}\r\nActual [{3}] encoded {4} of length {5}",
    estado,
    String.Join(" ", estado.Select(c => ((int) c).ToString("x4"))),
    estado.Length, 
    "Activo", // <- copy/paste all "Activo" from the if
    String.Join(" ", "Activo".Select(c => ((int) c).ToString("x4"))),
    "Activo".Length);

  MessageBox.Show(report);

  if(estado == "Activo") // <- if of the question
    ...

请看一下报告:你在哪里有分歧?我有两个相等的字符串

  

经测试[Activo]编码0041 0063 0074 0069 0076 006f长度为6

     

实际[Activo]编码0041 0063 0074 0069 0076 006f,长度为6

但在你的情况下应该存在差异

编辑:实验表明测试值为

  

测试[Activo] 0041 0063 0074 0069 0076 006f 0020 0020 0020 0020 of lenght 10

所以你有尾随空格,这是许多RDBMS的典型特征:你在表格中有CHAR(10)字段,所以给你 10 < / strong>字符串。要解决此问题,您只需修剪尾随空格:

 if (estado.TrimEnd() == "Activo") 
 {
    baja_btn.Enabled = true;
 }