C# 如何访问类中的数组元素
我有一个我不知道如何解决的问题。我有课。这个类有两个数组。我想通过属性访问。我怎么做?我尝试使用索引器,但如果只有一个数组,这是可能的。下面是我想做的:C# 如何访问类中的数组元素,c#,winforms,C#,Winforms,我有一个我不知道如何解决的问题。我有课。这个类有两个数组。我想通过属性访问。我怎么做?我尝试使用索引器,但如果只有一个数组,这是可能的。下面是我想做的: public class pointCollection { string[] myX; double[] myY; int maxArray; int i; public pointCollection(int maxArray) { this.maxArray = maxAr
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;
如果我没弄错的话,您需要某种类型的或只读/写的包装器来将数组作为属性公开
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);
}
}
如果我没弄错的话,您需要某种类型的或只读/写的包装器来将数组作为属性公开
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);
}
}
在不更改数据结构或不移动到方法的情况下,最接近的方法是创建一个返回每个数组的属性,就像在第一个代码块中所做的那样,除了没有[i]之外
然后,执行
var x=instanceOfPointCollection.MyX[someI]例如,code>。在不更改数据结构或移动到方法的情况下,最接近的方法是创建一个返回每个数组的属性,这与您在第一个代码块中所做的非常相似,只是没有[i]
然后,执行var x=instanceOfPointCollection.MyX[someI]代码>例如。一个元组示例
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]; }
}
}
一个元组示例
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]; }
}
}
可以使用元组数组吗?可以使用不同类型数据的数组吗?为什么要分别存储x和y?像Point
这样的结构可以让您只使用一个数组,索引器可以工作,不是吗?因为类型不同:像X的字符串、像Y的double如果您的目的是存储相互关联的字符串和double,Tuple[]最适合您的需要。正如@user467384所说的。你能使用元组数组吗?可以使用不同类型数据的数组吗?为什么要分别存储x和y?像Point
这样的结构可以让您只使用一个数组,索引器可以工作,不是吗?因为类型不同:像X的字符串、像Y的double如果您的目的是存储相互关联的字符串和double,Tuple[]最适合您的需要。正如@user467384所说的,为什么不将数组属性设置为受保护的集并对其进行处理呢?您的包装器类不会添加或删除任何内容。@Xcelled194数组实例除了索引器之外还有很多方法,例如Resize()。诀窍是只在类外使用左索引器。@dmay ahh,right,忘记了这些:)。但是,无论是问题还是你的答案都应该被改写,明确地说,为了未来的搜索者……更不用说他的整个数据结构可能需要重新思考。。。但我离题了…为什么不把数组属性设为一个受保护的集,然后处理它呢?您的包装器类不会添加或删除任何内容。@Xcelled194数组实例除了索引器之外还有很多方法,例如Resize()。诀窍是只在类外使用左索引器。@dmay ahh,right,忘记了这些:)。但是,无论是问题还是你的答案都应该被改写,明确地说,为了未来的搜索者……更不用说他的整个数据结构可能需要重新思考。。。但我离题了。。。