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