Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问类中的数组元素_C#_Winforms - Fatal编程技术网

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]

在不更改数据结构或移动到方法的情况下,最接近的方法是创建一个返回每个数组的属性,这与您在第一个代码块中所做的非常相似,只是没有[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,忘记了这些:)。但是,无论是问题还是你的答案都应该被改写,明确地说,为了未来的搜索者……更不用说他的整个数据结构可能需要重新思考。。。但我离题了。。。