Aquellos de nosotros que hemos trabajado en VB/VB.NET han visto un código similar a esta abominación:¿El operador "If" de VB.NET causa el boxeo?
Dim name As String = IIf(obj Is Nothing, "", obj.Name)
digo "abominación" por tres razones simples:
IIf
es una función, todos sus parámetros son evaluados; por lo tanto, siobj
no es nada en la llamada anterior, se lanzará unNullReferenceException
. Este es un comportamiento inesperado para alguien que está acostumbrado a los operadores ternarios en cortocircuito en idiomas como C#.- Dado que
IIf
es una función, se incurre en la sobrecarga de una llamada de función. De nuevo, aunque esto no es un gran problema, simplemente no se siente bien para alguien que espera que se comporte como una operación ternaria intrínseca al lenguaje. IIf
es no genérico y por lo tanto acepta parámetros de tipoObject
, lo que significa que las cajas de llamada siguientes (creo) un total de tres números enteros:' boxes 2nd and 3rd arguments as well as return value '
Dim value As Integer = IIf(condition, 1, -1)
Ahora, en una versión más reciente de VB.NET (no estoy seguro de cuál es el número), se introdujo el operador If
, que funciona exactamente de la misma manera que la función IIf
pero (según tengo entendido) sin el mismo shor Tcomings. Es decir, hace proporcionar un cortocircuito y es una operación VB intrínseca. Sin embargo, no estoy seguro de la última parte. El MSDN documentation no parece indicar si If
contiene sus argumentos o no. ¿Alguien sabe?
+1 ¡Esta pregunta fue divertida! –