2009-12-04 14 views
5

Hoy, mientras hablaba con mi colega, algo extraño salió de su mente.VB.net Medio como operador izquierdo especial (¿extraño?)

Una forma "secreta" para manejar cadena procedente de VB6, que era como:

Dim strSomeString as String 
strSomeString = "i am phat" 
Mid$(strSomeString, 6,4) = "hack" 

Esto pondría i am hack dentro strSomeString.

Sorprendiéndome de tal rareza con el soporte de vb6, me quedé totalmente impresionado cuando leí ese it is supported in VB.Net too (probablemente por compatibilidad con el código anterior).

Dim TestString As String 
' Initializes string. 
TestString = "The dog jumps" 
' Returns "The fox jumps". 
Mid(TestString, 5, 3) = "fox" 
' Returns "The cow jumps". 
Mid(TestString, 5) = "cow" 
' Returns "The cow jumpe". 
Mid(TestString, 5) = "cow jumped over" 
' Returns "The duc jumpe". 
Mid(TestString, 5, 3) = "duck" 

Mi pregunta es: ¿cómo está trabajando técnicamente? ¿Qué está Mid actuando en esa situación particular? (Método? Función? Método de extensión?)

+0

En mi tiempo haciendo VB6, no sabía que esto era remotamente posible. ¡Por favor dime que nadie está haciendo esto en .Net a propósito! –

+1

Sin preocupaciones. Si lo hace, advertirá de forma asíncrona a Microsoft, que enviará a personas malas que le darán una paliza al genio que lo hizo. –

Respuesta

8

se pone traducidos a una llamada MSIL a esta función en Microsoft.VisualBasic.CompilerServices.StringType

Public Shared Sub MidStmtStr (_ 
    ByRef sDest As String, _ 
    StartPosition As Integer, _ 
    MaxInsertLength As Integer, _ 
    sInsert As String _ 
) 

Este truco compilador es puramente para la compatibilidad hacia atrás. Está integrado en el compilador, por lo que no es el tipo de truco que puede implementar usted mismo en sus propios tipos.

Así

Mid(TestString, 5, 3) = "fox" 

convierte

MidStmtStr(TestString, 5, 3, "fox") 

Espero que esto ayude,

+0

Maravillosa respuesta, gracias. –

+0

@Alex: Me alegro de ser de ayuda amigo. –

Cuestiones relacionadas