【发布时间】:2015-05-03 03:54:49
【问题描述】:
我在理解如何使用 get 从我的类中获取二维数组时遇到了一些麻烦。
这是我的班级目前的样子:
class Something
{
private int[,] xArray;
public Something()
{
xArray = new int[var1, var2];
for (int row = 0; row < xArray.Getlength(0); row++)
for (int col = 0; col < xArray.GetLength(1); col++)
xArray[row, col] = someInt;
}
public int[,] XArray
{
get { return (int[,])xArray.Clone(); }
}
}
class Main
{
Something some;
public void writeOut()¨
{
some = new Something();
for (int row = 0; row < some.XArray.GetLength(0); row++)
for (int col = 0; col < some.XArray.GetLength(1); col++)
Console.Write(some.XArray[row, col].ToString());
}
}
当我使用调试器检查时,xArray 具有Something 类中应有的所有值,但它在Main 类中没有值,它只获取数组的大小。我做错了什么?
【问题讨论】:
-
这一行中
var1, var2的值是多少xArray = new int[var1, var2];你是否使用调试器单步执行代码...? -
您似乎在 Console.Write 语句中缺少
some.,但我怀疑这是您的问题,因为您的代码不应该在编译时出现该错误。也许您应该将此示例充实到一个完整的程序中,以便我们可以准确地重现您的错误。另请注意,您正在克隆数组 2 + var1 * var2 次,因为每次在writeOut方法中调用 XArray 属性时都会克隆它。 -
旁注:返回数组的副本对于预期用途来说是错误的......
-
我试图为您的问题创建fiddle。我看不出有什么问题。 (虽然我使用的是实际值)
-
@Rockyy 很高兴。是的,正如人们在这里提到的那样,每次调用
XArray时,您都在创建一个克隆。考虑将数组存储到局部变量中。