C# 如何使用此[][]进行arrayclass访问

C# 如何使用此[][]进行arrayclass访问,c#,arrays,class,matrix,this,C#,Arrays,Class,Matrix,This,我想为一些计算创建一个矩阵类。在我的研究中,我在一些关于性能的讨论中跌跌撞撞地发现了Array[,]vsArray[][],他们的结论是,如果你想快速使用Array[][] 当我试图通过[][]提供对值的访问时,我似乎错过了一些重要的内容,因为我无法创建这样的属性 public double this[int iRow][int iCol] { get { return matrix[iRow][iCol]; } set { matrix[i

我想为一些计算创建一个矩阵类。在我的研究中,我在一些关于性能的讨论中跌跌撞撞地发现了
Array[,]
vs
Array[][]
,他们的结论是,如果你想快速使用
Array[][]

当我试图通过
[][]
提供对值的访问时,我似乎错过了一些重要的内容,因为我无法创建这样的属性

    public double this[int iRow][int iCol]   
    {
        get { return matrix[iRow][iCol]; }
        set { matrix[iRow][iCol] = value; }
    }
我的问题是第二个[],因为下面的方法很有效

    public double this[int iRow,int iCol]   
    {
        get { return matrix[iRow][iCol]; }
        set { matrix[iRow][iCol] = value; }
    }
那么我需要在这个类中添加什么才能让它与[][]一起工作呢?

public class Matrix
{
    private bool _isSquare;

    private double[][] matrix;

    public double this[int iRow,int iCol]   
    {
        get { return matrix[iRow][iCol]; }
        set { matrix[iRow][iCol] = value; }
    }
}

你不能在一节课上做这件事

var b = a[1][2];

var temp = a[1];
var b = temp[2];
它们是两个独立的索引操作

您的第一个索引器需要返回某个类的实例,该类也有索引器


不确定你想做什么,但如果你的矩阵是以下矩阵,你仍然可以做你想做的事情

public class M
{
    public double[][] Matrix { get; private set; }
    public M()
    {
        Matrix = new double[2][]{new double[2], new double[2]};
    }
}

M n = new M();
n.Matrix[0][0] = 1.0;

为什么不让你的矩阵
get;私人设置?@Sayse这如何解决我的问题?目前,可访问性不重要。我已经添加了解释mhh的答案,因此如果我想通过
myMatrix[row][col]
访问值,我将永远无法获取所选的
col
,对吗?因为我只能返回一个
double[]
,它将得到
col
您是正确的。使用如下图所示的2D索引器有什么问题?(
this[int-iRow,int-iCol]
)如果我使用intern
[]]
,但通过
[,]
提供访问,有些人可能会认为使用intern的速度较慢
[,]
,所以我想我会很好地反映我intern使用的数组类型。非常重要的一点是要非常清楚,不要对术语懒惰(这完全是另外一回事。)但是,不,你所说的与抽象数据类型的整体观点背道而驰。内部结构就是:内部结构。它们对类的使用者是隐藏的,只要外部接口保持不变,您就可以随意实现和修改内部构件。我个人认为
[x,y]
更有意义。那为什么还要使用
类呢?这只是一个double数组的数组。整个数组都可以修改,你只是不能分配一个新的数组。在我看来,他想要一种将值写入矩阵的简便方法,而不是阻止这个类扩展到数学