2D/3D数组构造函数
本文关键字:构造函数 数组 3D 2D | 更新日期: 2023-09-27 18:05:15
我想创建一个名为A
的类,在实例化期间,给我ints
的2D
或3D
数组。如果我调用A(2)
,我应该得到对象Arr[10,10]
,当我调用A(3)
,我应该得到Arr[10,10,10]
。我现在不关心元素是什么
当我尝试这个时:
class A
{
public object Arr;
public A(int dim)
{
switch (dim)
{
case 2:
object Arr = new int[10, 10];
break;
case 3:
object Arr = new int[10, 10, 10];
break;
default:
object Arr = null;
break;
}
}
}
I got this:
CS0128在这个作用域中已经定义了一个名为"Arr"的局部变量。
当我尝试这个时:
class A
{
public object Arr;
public A(2)
{
object Arr = new int[10, 10];
}
public A(3)
{
object Arr = new int[10, 10, 10];
}
}
I got this:
CS1001标识符期望
我现在缺乏想法。
我可以这样做吗?
你得到了这个:
CS0128已经定义了一个名为"Arr"的局部变量范围。
因为您在每个case
中再次定义了object Arr
。应该改成Arr = new int[10, 10, 10];
在第二个例子中,你得到了这个:
CS1001标识符期望
我猜你真正想要的是实例化类A
的公共Arr
属性。所以你可能想要这样写:
this.Arr = new int[10, 10];
在每个构造函数中。
更多关于此CS1001 Identifier expected
。这是因为方法的签名期望一个变量,你正在传递2
和3
,我猜你想要的是int n
?
第二个例子是不正确的,因为您不需要两个Constructor
。你只需要一个Constructor
在你的情况下,就像这样使用Switch-Case
(不要在每个情况下再次定义Arr
):
public class A
{
public object Arr;
public A(int dim)
{
switch (dim)
{
case 2:
Arr = new int[10, 10];
break;
case 3:
Arr = new int[10, 10, 10];
break;
default:
Arr = null;
break;
}
}
}
然后:
A obj1 = new A(2);
var x = obj1.Arr;//int[10,10]
A obj2 = new A(3);
var y = obj2.Arr;//int[10,10,10]