2D/3D数组构造函数

本文关键字:构造函数 数组 3D 2D | 更新日期: 2023-09-27 18:05:15

我想创建一个名为A的类,在实例化期间,给我ints2D3D数组。如果我调用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标识符期望

我现在缺乏想法。

我可以这样做吗?

2D/3D数组构造函数

你得到了这个:

CS0128已经定义了一个名为"Arr"的局部变量范围。

因为您在每个case中再次定义了object Arr。应该改成Arr = new int[10, 10, 10];

在第二个例子中,你得到了这个:

CS1001标识符期望

我猜你真正想要的是实例化类A的公共Arr属性。所以你可能想要这样写:

this.Arr = new int[10, 10];

在每个构造函数中。

更多关于此CS1001 Identifier expected。这是因为方法的签名期望一个变量,你正在传递23,我猜你想要的是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]