3

我想实现一个属性,该属性根据它接收到的索引返回一个值。我只是封装一个私有数组。事实上,我将返回的数据没有存储在任何数组中,而是存储在成员对象中。此数组属性将只是一种以索引方式访问此数据的方式,而无需以索引方式存储它。

根据这篇文章,以下应该有效:

public double Angles[int i] 
{
    get { // return a value based on i; }
}

但是,我收到以下错误:

The type or namespace 'i' could not be found (are you missing a using directive or an assembly reference?)
Invalid token ']' in class, struct or interface member declaration
Invalid expression term 'int'
Bad array declarator: To declarate a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type.
Array size cannot be specified in a variable declaration (try initializing with a 'new' expression)

从这些错误中,我认为编译器似乎认为我正在尝试创建一个数组成员。显然我的语法在这里是错误的。谁能告诉我这样做的正确方法?

4

2 回答 2

4

C# 中不存在命名索引器。但是,您可以添加为具有Angles索引器的某种类型的对象,即

public class Foo {
    public Angles Angles { get { return angles; } }
    ...
}

...

public class Angles {
    public double this[int index] { get { ... } }
    ...
}

或者,如果您希望在一个类中实现:

public class Foo : IAngles {
    public IAngles Angles { get { return this; } }
    double IAngles.this[int index] { get { ... } }
}

public interface IAngles {
    double this[int index] { get;}
}
于 2013-04-10T09:07:44.040 回答
1

该方法必须如下所示:

public double this[int i] 
{
    get { // return a value based on i; }
}
于 2013-04-10T09:08:55.003 回答