1

我有一个问题,我不知道如何解决。我有一堂课。这个类有两个数组。我想通过属性访问。我该怎么做?我尝试使用索引器,但如果我只有一个数组,这是可能的。这是我想做的:

public class pointCollection
{
    string[] myX; 
    double[] myY;
    int maxArray;
    int i;
    public pointCollection(int maxArray)
    {
        this.maxArray = maxArray;
        this.myX = new string[maxArray];
        this.myY = new double[maxArray];           
    }
    public string X //It is just simple variable
    {
        set { this.myX[i] = value; }
        get { return this.myX[i]; }            
    }
    public double Y //it's too
    {
        set { this.myY[i] = value; }
        get { return this.myY[i]; }            
    }
}

使用此代码,我的 X 和 Y 只是简单的变量,而不是数组。如果我使用索引器,我只能访问一个数组:

    public string this[int i]
    {
        set { this.myX[i] = value; }
        get { return this.myX[i]; }            
    }

但是我怎样才能访问第二个数组?或者在这种情况下我不能使用财产?我只需要使用:

    public string[] myX; 
    public double[] myY;
4

3 回答 3

1

元组的一个例子。

public class pointCollection
{
    Tuple<String,Double>[] myPoints;
    int maxArray;
    int i;
    public pointCollection(int maxArray)
    {
        this.maxArray = maxArray;
        this.myPoints = new Tuple<String,Double>[maxArray];
    }
    public Tuple<String,Double> this[int i]
    {
        set { this.myPoints[i] = value; }
        get { return this.myPoints[i]; }            
    }
}

并访问您所做的点...

pointCollection pc = new pointCollection(10);
// add some data
String x = pc[4].Item1; // the first entry in a tuple is accessed via the Item1 property
Double y = pc[4].Item2; // the second entry in a tuple is accessed via the Item2 property
于 2013-07-29T14:59:23.303 回答
0

在不更改数据结构或转移到方法的情况下,您最接近的方法是创建一个返回每个数组的属性,就像您在第一个代码块中所做的那样,除了没有 [i]。

var x = instanceOfPointCollection.MyX[someI];然后,例如,您这样做。

于 2013-07-28T23:42:10.020 回答
0

如果我做对了,您需要某种类型的或只读/只读包装器,以便将数组公开为属性。

public class ReadWriteOnlyArray<T>{

    private T[] _array;

    public ReadWriteOnlyArray(T[] array){
        this._array = array;
    }

    public T this[int i]{
        get { return _array[i]; }
        set { _array[i] = value; }
    }
}

public class pointCollection
{
    string[] myX; 
    double[] myY;
    int maxArray;

    public ReadWriteOnlyArray<string> X {get; private set;}
    public ReadWriteOnlyArray<double> Y {get; private set;}

    public pointCollection(int maxArray)
    {
        this.maxArray = maxArray;
        this.myX = new string[maxArray];
        this.myY = new double[maxArray];           
        X = new ReadWriteOnlyArray<string>(myX);
        Y = new ReadWriteOnlyArray<double>(myY);
    }
}

和使用

 var c = new pointCollection(100);
 c.X[10] = "hello world";
 c.Y[20] = c.Y[30] + c.Y[40];
于 2013-07-28T23:39:33.880 回答