二维数组属性

发布于 2024-11-09 13:34:09 字数 59 浏览 0 评论 0原文

是否可以为二维数组编写一个属性来返回数组的特定元素?我很确定我不是在寻找索引器,因为它们数组属于静态类。

Is it possible to write a property for a 2D array that returns a specific element of an array ? I'm pretty sure I'm not looking for an indexer because they array belongs to a static class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绝影如岚 2024-11-16 13:34:09

听起来您想要一个带有参数的属性 - 这基本上就是索引器。但是,您不能用 C# 编写静态索引器。

当然,您可以只编写一个返回数组的属性 - 但我认为出于封装的原因您不想这样做。

另一种选择是编写 GetFoo(int x, int y)SetFoo(int x, int y, int value) 方法。

另一种替代方法是在数组周围编写一个包装类型并将that作为属性返回。包装类型可以有一个索引器 - 也许只是一个只读索引器,例如:

public class Wrapper<T>
{
    private readonly T[,] array;

    public Wrapper(T[,] array)
    {
        this.array = array;
    }

    public T this[int x, int y]
    {
        return array[x, y];
    }

    public int Rows { get { return array.GetUpperBound(0); } }
    public int Columns { get { return array.GetUpperBound(1); } }
}

然后:

public static class Foo
{
    private static readonly int[,] data = ...;

    // Could also cache the Wrapper and return the same one each time.
    public static Wrapper<int> Data
    {
        get { return new Wrapper<int>(data); }
    }
}

It sounds like you want a property with parameters - which is basically what an indexer is. However, you can't write static indexers in C#.

Of course you could just write a property which returns the array - but I assume you don't want to do that for reasons of encapsulation.

Another alternative would be to write GetFoo(int x, int y) and SetFoo(int x, int y, int value) methods.

Yet another alternative would be to write a wrapper type around the array and return that as a property. The wrapper type could have an indexer - maybe just a readonly one, for example:

public class Wrapper<T>
{
    private readonly T[,] array;

    public Wrapper(T[,] array)
    {
        this.array = array;
    }

    public T this[int x, int y]
    {
        return array[x, y];
    }

    public int Rows { get { return array.GetUpperBound(0); } }
    public int Columns { get { return array.GetUpperBound(1); } }
}

Then:

public static class Foo
{
    private static readonly int[,] data = ...;

    // Could also cache the Wrapper and return the same one each time.
    public static Wrapper<int> Data
    {
        get { return new Wrapper<int>(data); }
    }
}
浪菊怪哟 2024-11-16 13:34:09

你的意思是这样的吗?

array[x][y]

其中 x 是行,y 是列。

Do you mean something like this?

array[x][y]

Where x is the row and y is the column.

唔猫 2024-11-16 13:34:09

也许是这样的?:

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

Maybe something like this?:

public string this[int x, int y] 
{
   get { return TextArray[x, y]; }
   set { TextArray[x, y] = value; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文