覆盖偏移量的索引运算符

Override index operator for offset

在我的项目中,我需要一个 "shifted" 列表。 基本上我有一个 public class dyn_int : List<int> 来支持我们的一些旧脚本(用专有语言编写,但 "semi-auto-translated" 到 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);
        }
    }
}

这是一个快速的 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;
       }
    }
}