覆盖偏移量的索引运算符
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;
}
}
}
在我的项目中,我需要一个 "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;
}
}
}