¿El operador "If" de VB.NET causa boxeo?

Aquellos de nosotros que hemos trabajado en VB / VB.NET hemos visto un código similar a esta abominación:

Dim name As String = IIf(obj Is Nothing, "", obj.Name)

Digo "abominación" por tres simples razones:

IIf es unfunción, todos cuyos parámetros son evaluados; por lo tanto siobj no hay nada en la llamada anterior, entonces unaNullReferenceException será arrojado Este es un comportamiento inesperado para alguien que está acostumbrado a los operadores ternarios en cortocircuito en lenguajes como C #.Porque IIf es una función, por lo tanto incurre en la sobrecarga de una llamada de función. Una vez más, 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 no es genérico y, por lo tanto, acepta parámetros de tipoObject, lo que significa los siguientes cuadros de llamada (creo) un total de tres enteros:

' boxes 2nd and 3rd arguments as well as return value '
Dim value As Integer = IIf(condition, 1, -1)

Ahora, en alguna versión más reciente de VB.NET (no estoy seguro de cuál es el número), elIf se introdujo el operador, que funciona exactamente igual que elIIf funcionan pero (según tengo entendido) sin las mismas deficiencias. Es decir, esohace proporcionar cortocircuito yes Una operación intrínseca de VB. Sin embargo, no estoy seguro de la última parte. losDocumentación de MSDN no parece indicar siIf cajas de sus argumentos o no. ¿Alguien sabe?