2

我在某处看到过锯齿状的索引器,想知道如何使它们工作。

我知道我可以做到以下几点:

class foo
{
    public string this[int i1]
    {
        get{ return GetString(i1); }
    }

    public string this[int i1, int i2]
    {
        get{ return GetString(i1) + GetString(i2); }
    }
}

以便:

string s1 = foo[5];
string s2 = foo[12,8];

问题是,我如何定义索引器来做......

string s2 = foo[12][8];

如果可能(否则不清楚),我也会感谢 setter 定义。

foo[12][8] = "qwerty";
4

2 回答 2

4

Derrick Shepard 的回答似乎是正确的,但我为您提供了一些注意事项:

使用您当前的方法:

public string this[int i1]
public string this[int i1, int i2]

foo[12][8]相当于解析为(foo[12])[8]; 你会得到string foo[12]然后得到它的第 9 个字符。

如果您愿意更改您的第一个方法(带有单个参数的索引器),您可以考虑返回一个对象,该对象反过来会提供另一个索引器。

于 2013-10-18T04:22:47.963 回答
1

我希望这是您正在寻找的:

class foo
{
    private string[][] collection = new string[2][];

    public string[] this[int index]
    {
        get
        { 
            return collection[index]; 
        }
        set
        {
            collection[index] = value;
        }
    }
}

接着:

string s1 = foo[1][0];
foo[1][0] = s1;

当我创建它时我很高兴,但对我个人而言,这很令人困惑,因为 getter 和 setter 很奇怪。看起来如果集合是一维数组而不是锯齿状的。

于 2021-12-17T18:32:24.157 回答