1

解決方法がわからない問題があります。クラスがあります。このクラスには 2 つの配列があります。プロパティ経由でアクセスしたい。どうすればいいですか?インデクサーを使用しようとしましたが、配列が 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 は単なる変数であり、配列ではありません。インデクサーを使用すると、1 つの配列にしかアクセスできなくなります。

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

しかし、どうすれば2番目の配列にアクセスできますか? または、この場合、プロパティを使用できませんか? そして、私は使用するだけです:

    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

私が正しければ、配列をプロパティとして公開するには、何らかの種類または読み取り/書き込み専用のラッパーが必要です。

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 に答える
0

データ構造を変更したり、メソッドに移動したりせずに最も近い方法は、[i] がないことを除いて、最初のコード ブロックで行ったのと同じように、各配列を返すプロパティを作成することです。

次に、var x = instanceOfPointCollection.MyX[someI];たとえばそうします。

于 2013-07-28T23:42:10.020 に答える