2015-07-28 3 views
-1

Я хотел бы создать класс под названием A, который при создании экземпляра даст мне 2D или 3D массив ints. Если я позвоню A(2), я должен получить объект Arr[10,10], а когда я позвоню A(3), я должен получить Arr[10,10,10]. Мне все равно, что это за элементы.Конструктор 2D/3D-массива

Когда я попытался это:

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; 
     } 
    }  
} 

Я получил это:

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]; 
    } 
} 

Я получил это:

CS1001 Ожидается идентификатор

теперь я не хватает идей.

Могу ли я вообще это сделать?

ответ

3

Вы получаете это:

CS0128 Локальная переменная с именем 'Arr' уже определено в этом области.

Потому что вы определяете снова object Arr внутри каждого case. Это должно быть просто Arr = new int[10, 10, 10];

Во втором примере, в котором вы получите это:

CS1001 Ожидается идентификатор

Я думаю, что вы действительно хотите, чтобы создать экземпляр общественных Arr атрибута класс A. Поэтому вы, вероятно, хотите что-то вроде этого:

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

Внутри каждого конструктора.

Подробнее об этом CS1001 Identifier expected. Это потому, что подпись метода ожидает переменную, и вы проходите 2 и 3, и я предполагаю, что вы хотите, есть int n?

+1

Второй один терпит неудачу, потому конструктора подписи ожидает тип и имя для параметров. – juharr

+0

благодарит @juharr, добавляет разъяснение. –

1

Ваш второй пример неверен, потому что вам не нужны два 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] 
Смежные вопросы