2009-12-04 6 views
5

Oggi, parlando con il mio collega, qualcosa di strano è uscito dalla sua mente.VB.net Comportamento speciale di mezz'aria dell'operatore sinistro (strano?)

Un modo "segreto" per gestire stringhe provenienti da VB6, che era come:

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

Questo metterebbe i am hack all'interno strSomeString.

Pur essendo sorpreso di questa stranezza supportata nel vb6, sono stato totalmente sconvolto quando ho letto che it is supported in VB.Net too (probabilmente per compatibilità con il vecchio codice).

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" 

La mia domanda è: come funziona tecnicamente? Che cosa è Mid comportarsi come in quella particolare situazione? (Metodo? Funzione? Metodo di estensione?)

+0

Nel mio tempo facendo VB6, non ho mai saputo che questo era lontanamente possibile. Per favore, dimmi che nessuno lo sta facendo in .Net di proposito! –

+1

Nessun problema. Fare così avverte asincronicamente Microsoft, che invierà persone cattive che sconfiggono il genio che l'ha fatto. –

risposta

8

Essa si traduce ad una chiamata MSIL a questa funzione in Microsoft.VisualBasic.CompilerServices.StringType

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

Questo trucco compilatore è puramente per compatibilità all'indietro. È integrato nel compilatore, quindi non è il tipo di trucco che è possibile implementare sui propri tipi.

Così

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

diventa

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

Spero che questo aiuti,

+0

Risposta meravigliosa, grazie. –

+0

@Alex: Felice di essere un compagno di aiuto. –