2015-11-04 25 views
0

在我的項目中,我需要一個「移位」列表。 基本上我有一個public class dyn_int : List<int>來支持我們的一些舊腳本(寫在一個專有的語言,但「半自動翻譯」,以C#)覆蓋索引運算符的偏移量

在這種語言,名單開始了他們的指數爲1,而不是0!

我目前嘗試創建一個方便的API,以便我們的開發人員仍然可以使用他們熟悉的風格。

但是我堅持創建索引運算符。 這是我目前對列表的索引訪問器的實現。 吸氣劑工作正常,但我不知道如何處理set方法。 到目前爲止我沒有找到List.SetElementAt(key, value)的方法。

public class dyn_int : List<int> 
{ 
    public int this[int key] 
    { 
     get 
     { 
      return this.ElementAt(key-1); 
     } 
    } 
} 
+1

'getter正常工作......你試過'dyn_int [0]'嗎? – Jonesopolis

+5

我會*強烈*敦促你在這裏使用組合而不是繼承(並開始遵循.NET命名約定)。給你的班級一個'List '*變量*,而不是從'List '派生出來,並讓你的班級實施'IList '......儘管考慮到索引者的期望,這將是「有趣的」。 –

+1

您也不應該使用'ElementAt'從列表中獲取項目。您正在迭代整個序列以獲取該節點。 – Servy

回答

1

這是一個快速的linqPad測試。你需要做一些錯誤處理等,但這應該讓你去。

void Main() 
{ 
    var list = new CustomList<int>(); 
    list.Add(1); 
    list.Add(2); 

    list[1] = 5; 
    list[1].Dump(); //output 5 
} 

public class CustomList<T> 
{ 
    IList<T> list = new List<T>(); 

    public void Add(T item) 
    { 
     list.Add(item); 
    } 

    public T this[int index] 
    { 
     get 
     { 
      return list[index - 1]; 
     } 
     set 
     { 
      list[index - 1] = value; 
     } 
    } 
} 
+0

我已經試過這個解決方案(函數add)。但是,我正在尋找一種使用索引來直接設置元素的方法。 – stklik

+0

然後只需添加一個setter。我更新了答案。 –