2013-09-04 3 views
0

У меня возникли проблемы с добавлением объектов в ArrayList. При попытке добавить KeyboardController() и GamepadController() в ArrayList, мне сказали, что ControllerList является полем, но он используется как тип. Оба этих класса реализуют интерфейс IController. Более того, мне говорят, что и KC(), и GC() должны иметь тип возврата. Кто-нибудь сможет сообщить мне, что вызывает проблему. Есть ли более правильный способ сделать это?C#/XNA Почему я не могу добавить в список массивов?

// Initialization 

ArrayList ControllerList; 
ControllerList.Add(new KeyboardController()); //error 
ControllerList.Add(new GamepadController()); //error 

IAnimatedSprite MarioSprite = new SmallMarioRunningRightSprite(); 

protected override void Update(GameTime gameTime) 
{ 
    foreach(IController Controller in ControllerList) 
    { 
     Controller.Update(); 
    } 

    MarioSprite.Update(); 

    base.Update(gameTime); 
} 

Этот специальный раздел кода был предоставлен мне инструктором, и я не понимаю, почему он не работает должным образом.

ответ

3

Вы пытаетесь выполнить без инициализации кода (звонки в ArrayList.Add) вне тела метода. Это не сработает.

Вы должны либо использовать синтаксис коллекции Initializer

ArrayList ControllerList = new ArrayList 
           { 
            new KeyboardController(), 
            new GamepadController() 
           }; 

или сделать инициализацию в конструкторе класса.

Кроме того, не используйте ArrayList, если вам не нужно. Вместо этого используйте List<IController>.

+0

Я читал, что List используется в пользу ArrayList, но я сохранил его, потому что это был инструктор с кодом. Спасибо вам за быстрый ответ. –

3

Вам нужно поместить элемент, добавляющий строки кода в конструктор класса или метод.

ControllerList = new ArrayList(); 
ControllerList.Add(new KeyboardController()); 

, а также вы не можете добавлять элементы не инициализированы (null) ArrayList, вы только объявить ControllerList как ArrayList но не инициализируется

+2

У ОП есть * компиляция * ошибка, на которую этот ответ ничего не делает. Было бы уместно, если бы ошибка была исключением NullReferenceException, но не соответствует текущей ошибке. –

+0

@JonSkeet обновленный ответ. спасибо за указание. – Damith

Смежные вопросы