Un programador C .net puede pensar que la instrucción iif de vb es equivalente al operador de compración ?
Una sorpresa: ¿que crees que saldrá en el MessageBox?

Dim total As Integer = 0
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim a As Integer = 1
Dim b As Integer = 2
Dim c As Boolean = IIf(a = b, funcion1("b"), funcion2("1"))
MessageBox.Show(total)
End Sub
Public Function funcion1(ByVal valor As String) As Boolean
total = total + 1
Return True
End Function
Public Function funcion2(ByVal valor As String) As Boolean
total = total + 1
Return True
End Function
2 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim a As Integer = 1
Dim b As Integer = 2
Dim c As Boolean = IIf(a = b, funcion1("b"), funcion2("1"))
MessageBox.Show(total)
End Sub
Public Function funcion1(ByVal valor As String) As Boolean
total = total + 1
Return True
End Function
Public Function funcion2(ByVal valor As String) As Boolean
total = total + 1
Return True
End Function
.png)
Y resulta que está documentado http://msdn.microsoft.com/es-es/library/27ydhh0d%28v=vs.80%29.aspx
“El IIF evalúa el código a ejecutar (tanto si la condición es verdadera o falsa) antes de ejecutarlo (esto no sé si es fallo de MS o es intencional). El problema que podemos encontrar con esto es que hay que asegurarse que las sentencias a ejecutar sean válidas en todas las condiciones, si no tendremos un excepción.”
Si tienes curiosidad C#, hace lo que esperas (o por lo menos lo que yo esero: el valor de total es 1
.png)
int total = 0;
private void button1_Click(object sender, EventArgs e)
{
int a = 1;
int b = 2;
bool c = (a == b ? funcion1("b") : funcion2("1"));
MessageBox.Show(total.ToString());
}
private bool funcion1(String valor)
{
total = total + 1;
return true;
}
private bool funcion2(String valor)
{
total = total + 1;
return true;
}
private void button1_Click(object sender, EventArgs e)
{
int a = 1;
int b = 2;
bool c = (a == b ? funcion1("b") : funcion2("1"));
MessageBox.Show(total.ToString());
}
private bool funcion1(String valor)
{
total = total + 1;
return true;
}
private bool funcion2(String valor)
{
total = total + 1;
return true;
}
No hay comentarios:
Publicar un comentario