Verursacht der VB.NET-Operator "If" Boxen?

Diejenigen von uns, die in VB / VB.NET gearbeitet haben, haben einen ähnlichen Code wie diesen gesehen:

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

Ich sage "Greuel" aus drei einfachen Gründen:

IIf ist einFunktion, deren Parameter alle ausgewertet werden; also wennobj ist nix im obigen aufruf dann einNullReferenceException wird geworfen. Dies ist ein unerwartetes Verhalten für jemanden, der an kurzgeschlossene ternäre Operatoren in Sprachen wie C # gewöhnt ist.weil IIf Ist eine Funktion, so entsteht der Overhead eines Funktionsaufrufs. Obwohl dies keine große Sache ist, fühlt es sich für jemanden, der erwartet, dass es sich wie eine ternäre Operation verhält, die der Sprache eigen ist, einfach nicht richtig an.

IIf ist nicht generisch und akzeptiert daher Parameter vom TypObjectDies bedeutet, dass die folgenden Callboxen (glaube ich) insgesamt drei ganze Zahlen enthalten:

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

Nun, in einer neueren Version von VB.NET (ich bin mir nicht sicher, wie die Nummer lautet), ist dieIf Es wurde der Operator eingeführt, der genauso funktioniert wie derIIf funktioniert aber (wie ich es verstehe) ohne die gleichen mängel. Das heißt estut Kurzschluss und esist eine intrinstische VB-Operation. Bei dem letzten Teil bin ich mir jedoch nicht sicher. DasMSDN-Dokumentation scheint nicht anzugeben, obIf Boxen ihre Argumente oder nicht. Weiß jemand?