2013-01-01 46 views
3

我只是在使用ILSpy閱讀System.Collections.Generic.List(Of T).Add(item As T)的反編譯代碼,我發現了一個致電__PostIncrement的調用。我從來沒有聽說過這樣的事情在VB中,所以我做了一些挖掘和發現:反編譯VB中的__PostIncrement(ILSpy)

  1. 在VB中,代碼是Me._items(__PostIncrement(Me._size)) = item
  2. 在C#中,代碼this._items[this._size++] = item;使用實際遞增運算符,以該語言
  3. 在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代碼中使用的某種定義?

回答

2

__PostIncrement相當於C#operator++。這是向數字增加(添加一個)的快速方法。不幸的是,根據list of operators in Visual Basic,沒有等價物。

+0

它是在VB語言規範中定義的,所以我可以在我的代碼中使用它? –

+0

已更新答案,以表明VB似乎不支持'++'或'--'運算符的前綴或後綴版本。 – akton

+0

我知道。這是我的問題。如果沒有這樣的東西存在,爲什麼ILSpy反編譯爲'__PostIncrement'? –