反编译VB中的__PostIncrement是什么(由ILSpy提供)

时间:2013-01-01 10:11:02

标签: vb.net cil decompiling ilspy

我正在使用ILSpy仔细阅读System.Collections.Generic.List(Of T).Add(item As T)的反编译代码,然后我找到了对__PostIncrement的调用。我从来没有在VB中听说过这样的事情,所以我做了一些挖掘并找到了:

  1. 在VB中,代码为Me._items(__PostIncrement(Me._size)) = item
  2. 在C#中,代码为this._items[this._size++] = item;,使用该语言的实际后增量运算符
  3. 在MSIL中,没有函数调用。它似乎像C#后增量一样工作(评论是我的,但我不是MSIL的专家,所以我可能错了)。
  4. 代码是:

    IL_001e: ldarg.0
    IL_001f: ldfld !0[] class System.Collections.Generic.List`1<!T>::_items
    IL_0024: ldarg.0
    IL_0025: dup
    IL_0026: ldfld int32 class System.Collections.Generic.List`1<!T>::_size
    IL_002b: dup
    IL_002c: stloc.0           // store the size pre incrementing
    IL_002d: ldc.i4.1
    IL_002e: add               // do the increment
    IL_002f: stfld int32 class System.Collections.Generic.List`1<!T>::_size
    IL_0034: ldloc.0           // reload the stored size to use as index in stelem
    IL_0035: ldarg.1
    IL_0036: stelem.any !T
    

    这究竟是什么__PostIncrement?是否是一个SharpDevelop发明来象征VB中的后增量IL代码?或者它实际上是我可以在我自己的VB代码中使用的某种定义?

1 个答案:

答案 0 :(得分:2)

__ PostIncrement相当于C#operator++。这是一种快速增加(添加一个)数字的方法。不幸的是,根据list of operators in Visual Basic,没有相应的内容。