C# 二维数组属性

C# 二维数组属性,c#,properties,multidimensional-array,C#,Properties,Multidimensional Array,是否可以为返回数组特定元素的2D数组编写属性?我很确定我不是在找索引器,因为它们数组属于静态类。你的意思是这样的吗 array[x][y] 其中x是行,y是列。听起来您需要一个带参数的属性,这基本上就是索引器。但是,不能用C#编写静态索引器 当然,您可以只编写一个返回数组的属性——但我假设您不想这样做是因为封装的原因 另一种选择是编写GetFoo(intx,inty)和SetFoo(intx,inty,intvalue)方法 另一种选择是围绕数组编写包装器类型,并将其作为属性返回。包装器类型可

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

你的意思是这样的吗

array[x][y]

其中x是行,y是列。

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

当然,您可以只编写一个返回数组的属性——但我假设您不想这样做是因为封装的原因

另一种选择是编写
GetFoo(intx,inty)
SetFoo(intx,inty,intvalue)
方法

另一种选择是围绕数组编写包装器类型,并将其作为属性返回。包装器类型可以有一个索引器-可能只是一个只读索引器,例如:

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); } }
}
公共类包装器
{
专用只读T[,]数组;
公共包装器(T[,]数组)
{
this.array=数组;
}
公共T这个[int x,int y]
{
返回数组[x,y];
}
公共int行{get{return array.GetUpperBound(0);}
公共int列{get{return array.GetUpperBound(1);}
}
然后:

公共静态类Foo
{
私有静态只读int[,]数据=。。。;
//还可以缓存包装并每次返回相同的包装。
公共静态包装器数据
{
获取{返回新包装(数据);}
}
}

也许是这样的

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

我没法回答你的问题,我以为我们不能通过属性返回数组?忽略这一点,你回答了我的问题。@安德鲁:不能和不应该是一回事。您可以返回对数组的引用,但是您无法控制该数组的使用方式,而不是
返回此[x,y](这将给出无限递归)。问题是它位于静态类中,因此必须是静态成员。不能在C#中创建静态索引器。
public string this[int x, int y] 
{
   get { return TextArray[x, y]; }
   set { TextArray[x, y] = value; }
}