2014-12-04 4 views
0

У меня есть простой класс, что-то вроде этого:IndexOutOfRange в конструкторе C#

public class myClass 
{ 
    public static readonly string[] stringArray= { "one", "two" }; 
    private string myString; 

    public myClass (int _index) 
    { 
     if(_index > (stringArray.Length - 1) || _index < 0) 
     { 
      throw new IndexOutOfRangeException("Bad index."); 
     } 
     else 
     { 
      myString = stringArray[_index]; 
     } 
    } 

} 

Я бег простого конструктора: MyClass примера = MyClass (5); и у меня есть ошибка. Не нужно оставлять конструктор, не пытаясь создать новый объект?

Я не понимаю, как там работает бросок.


Редактировать: К сожалению, я допустил ошибку. Должен быть stringArray.Length -1 в разделе if.

+0

Это не дубликат. OP имеет тип в своем коде, и ему нужна помощь. –

+0

Вы не понимаете, почему выбрано ваше исключение, или почему бросание исключения в конструкторе приведет к тому, что объект не будет инициализирован? – juharr

+0

Я просто хочу что-то вроде этого: myClass example = myClass (1); -> Все в порядке, у меня есть объект myClass example = myClass (5); -> Ошибка записи в консоли. – user3692826

ответ

1

Поскольку вы передаете 5 как _index к вашему конструктору следующее, если условие будет истинным

if(_index > (stringArray.Length - 1) || _index < 0) 

, поскольку длина массива 2 5> 1. Это заставляет код выкидывать IndexOutOfRangeException, который останавливает конструктор от возврата экземпляра объекта. Кроме того, если у вас нет try-catch вокруг new myClass(5), тогда исключение будет пузыриться и привести к сбою запускающего приложения.

3

myString is null, так что вы получаете исключение NullReferenceException при доступе к свойству Length.

Я предполагаю, что вы хотите:

if(_index > (stringArray.Length - 1) || _index < 0) 
+0

Мое предположение было бы и вашим догадкой. –

+0

Несмотря на это, он все еще не работает, но я обработал такое исключение. – user3692826

0

У вас есть опечатка в коде. Вам нужно получить длину массива, а не строку.

Строка кода должна:

if(_index > (stringArray.Length - 1) || _index < 0) 
Смежные вопросы