通过索引器访问C#中的属性

时间:2016-01-31 17:02:32

标签: c# arrays properties

C#允许您覆盖this属性的数组索引器,如下所示:

int this[int index] 
{
    get { return _hidden[index]; } 
    set { _hidden[index] = value; }
}
int[] _hidden;

但是,我想通过索引访问不同名称的属性,如下所示:

int Hidden[int index] 
{ 
    get { return _hidden[index]; } 
    set { _hidden[index] = value; }
}
int[] _hidden;

我知道我可以通过将它用作常规参数来解决这个问题:

int Hidden(int index) 
{
    return _hidden[index];
}
void Hidden(int index, int value) 
{ 
    _hidden[index] = value;
}
int[] _hidden;

然而,我失去了命名属性的便​​利性,而且我基本上回到了公开命名的get / set方法。另外,由于我在幕后访问数组的成员,因此对于我的情况,数组索引符号在概念上更有意义。

有没有办法将运算符的便利性与数组索引器相结合?

1 个答案:

答案 0 :(得分:2)

属性不能像可索引项一样,除非它返回一个。您有两种选择:

  • 返回您已经拥有的数组,列表或其他项目
  • 创建一个提供索引器的对象并返回值

第一个很简单,但它允许更改数组/列表/任何内容。第二个只能有一个吸气剂,所以它可以只读。

我很确定使用索引器和getter创建一个通用模板并不是很多行代码来封装存储值的实际对象(如果需要的话)。