我正在使用ILSpy仔细阅读System.Collections.Generic.List(Of T).Add(item As T)
的反编译代码,然后我找到了对__PostIncrement
的调用。我从来没有在VB中听说过这样的事情,所以我做了一些挖掘并找到了:
Me._items(__PostIncrement(Me._size)) = item
。this._items[this._size++] = item;
,使用该语言的实际后增量运算符代码是:
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代码中使用的某种定义?
答案 0 :(得分:2)
__ PostIncrement相当于C#operator++
。这是一种快速增加(添加一个)数字的方法。不幸的是,根据list of operators in Visual Basic,没有相应的内容。