代码之家  ›  专栏  ›  技术社区  ›  Alex Bagnolini

vb.net中左运算符特殊(奇怪?)行为

  •  5
  • Alex Bagnolini  · 技术社区  · 15 年前

    今天,在和我的同事谈话时,他突然想到了一些奇怪的事情。

    处理来自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 回复  |  直到 15 年前
        1
  •  8
  •   Binary Worrier    15 年前

    它在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")
    

    希望这有帮助,