覆盖索引运算符以进行偏移

时间:2015-11-04 17:18:30

标签: c# operator-overloading

在我的项目中,我需要一个&#34;转移&#34;名单。 基本上我有一个public class dyn_int : List<int>来支持我们的一些旧脚本(用专有语言编写,但是&#34;半自动翻译&#34;到C#)

在该语言中,列表以1开始索引,而不是0!

我目前尝试创建一个便利API,以便我们的开发人员仍然可以使用他们熟悉的样式。

但我坚持创建索引运算符。 这是我当前对列表的索引访问器的实现。 getter工作正常,但我不知道如何处理set方法。 到目前为止,我没有找到List.SetElementAt(key, value)方法。

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

1 个答案:

答案 0 :(得分: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;
       }
    }
}