C# indexer

C# indexer

我們可能會拿一個 int 來做 bitwise 的判斷,在 32 bits 電腦上,就可以有 32 個 bool 值。然而,像以下的 expression:

(value & (1 << 6)) != 0

在程式中總是比較不友善。如果我們能夠像 array 一樣使用 [] 來操作 int,程式就會很清楚明瞭。這就是 indexer。在使用 indexer 的情況下,我們要存取 index 6 的元素,只要:

value[6]

就可以達到了。

以下定義一個 indexer:

struct IntBits
{
   ...
   public bool this [ int index ]
   {
      get { return (bits & (1 << index) != 0; }
      set
      {
         if (value) bits |= (1 << index);
         else bits &= ~(1 << index);
      }
   }
}

indexer 並非一個 method,它使用 this 這個關鍵字。而 value 代表設定進 indexer 的值。與 array 不同,indexer 不只限於使用 int 當作索引值。它也可以類似 hash 這樣使用字串當索引值。在 indexer 中的 get/set 會由 compiler 自行判斷。像

bits[6] = 1;

就是 set。而

bool i = bits[6];

就是 get。

留言

熱門文章