2013-07-28 84 views
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; 
+2

您可以使用組<字符串,雙>的數組? – user467384

+0

是否有可能使用不同類型的數據的數組? – mit

+0

爲什麼要分別存儲x和y?像Point這樣的結構可能會給你一個數組並且索引器可以工作,不是嗎? –

回答

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]; 
+0

寫下一個簡單的例子。爲什麼不直接將數組屬性設置爲受保護集並使用它呢?你的包裝類不會添加或刪除任何東西。 – Xcelled194

+0

謝謝!一切正常! – mit

+0

@ Xcelled194除了索引器之外,數組實例還有很多方法,例如Resize()。訣竅是隻在課堂外留下索引器。 – dmay

0

你會來沒有更改你的數據結構或移動的方法最接近的是使返回每個數組的屬性,就像你在你的第一個代碼做塊,除了沒有[i]。

然後,你做了var x = instanceOfPointCollection.MyX[someI];例如。

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 
相關問題