C# - 如何重载 [][](两个方括号)

C# - How to overload [][] (two square brakets)

我想创建我的 Matrix class 字段:double[][] _elements, 但我不知道如何为 getset.

写 属性 [][]

从这里开始:https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

public double[] this[int i]
{
    get { return arr [i]; }
    set { arr [i] = value; }
}

你为什么不创建一个有两个参数的索引器?

public double this[int i, int j]
{
    get
    {
        return _elements[i][j];
    }
    set
    {
        _elements[i][j] = value;
    }
}

用法:

var myValue = myInstance[1, 4];

这是您需要的 Indexer :

public double this[int x, int y]
{
    get { return _elements[x][y]; }
    set { _elements[x][y] = value; }
}

要获得索引 属性 您需要做的事情

public class YourClass
{
    private double[][] _elements;

    public double[] this[int index]
    {
        get
        {
            return _elements[index];
        }
        set
        {
            _elements[index] = value;
        }
    }
}

这样就可以了

var instance = new YourClass();
var d = instance[0][1];
instance[0][1] = 2.5;

虽然在这一点上你需要小心你的索引范围并且可能应该在另一个 属性.

中公开 _element.Length