3
我只是在使用ILSpy閱讀System.Collections.Generic.List(Of T).Add(item As T)
的反編譯代碼,我發現了一個致電__PostIncrement
的調用。我從來沒有聽說過這樣的事情在VB中,所以我做了一些挖掘和發現:反編譯VB中的__PostIncrement(ILSpy)
- 在VB中,代碼是
Me._items(__PostIncrement(Me._size)) = item
。 - 在C#中,代碼
this._items[this._size++] = item;
使用實際遞增運算符,以該語言 - 在MSIL,沒有函數調用。它似乎像C#後增量會工作(評論是我的,但我不是MSIL的專家,所以我可能是錯的)。
的代碼是:
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代碼中使用的某種定義?
它是在VB語言規範中定義的,所以我可以在我的代碼中使用它? –
已更新答案,以表明VB似乎不支持'++'或'--'運算符的前綴或後綴版本。 – akton
我知道。這是我的問題。如果沒有這樣的東西存在,爲什麼ILSpy反編譯爲'__PostIncrement'? –