VB.net Mid作为左操作员特殊(奇怪?)行为

时间:2009-12-04 16:31:38

标签: .net vb.net

今天,在与我的同事交谈时,脑子里出现了一些奇怪的东西。

处理来自vb6的字符串的“秘密”方式,如:

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

这会将i am hack放在strSomeString内。

虽然对vb6中支持的这种奇怪感到惊讶,但当我读到it is supported in VB.Net too时(可能是为了与旧代码兼容),我完全被吹了。

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"

我的问题是:它在技术上如何运作? Mid在特定情况下的行为是什么? (方法?函数?扩展方法?)

1 个答案:

答案 0 :(得分:8)

它被转换为对Microsoft.VisualBasic.CompilerServices.StringType

中此函数的MSIL调用
Public Shared Sub MidStmtStr ( _
    ByRef sDest As String, _
    StartPosition As Integer, _
    MaxInsertLength As Integer, _
    sInsert As String _
)

这个编译器技巧纯粹是为了向后兼容。它内置于编译器中,因此不是您可以在自己的类型上实现的技巧。

所以

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

变为

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

希望这有帮助,