2014-12-04 3 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); 나는 오류가있다. 새 개체를 만들지 않고 생성자를 떠나지 않아야합니까?

나는 던지기가 어떻게 작동하는지 이해하지 못합니다.


편집 : 죄송합니다. 실수를했습니다. if 부분에는 stringArray.Length -1이 있어야합니다.

+0

이것은 중복되지 않습니다. OP는 코드에 유형이 있으며 도움이 필요합니다. –

+0

예외가 던져진 이유 또는 생성자에서 예외를 throw하면 개체가 초기화되지 않는 이유를 이해할 수 없습니까? – juharr

+0

난 그냥 그런 식으로하고 싶습니다 : myClass example = myClass (1); -> 괜찮아, 내 물건을 가지고있다. myClass example = myClass (5); -> 콘솔에 쓰기 오류. – user3692826

답변

1

때문에 당신은 배열의 길이가 2이기 때문에 조건이

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

사실 않을 경우 다음과 같은 생성자에 _index로 (5)를 전달하는 an 5> 1. 이로 인해 생성자가 객체의 인스턴스를 반환하지 못하도록 코드 IndexOutOfRangeException이 발생합니다. 또한 new myClass(5) 주위에 try-catch이 없으면 예외가 발생하여 실행중인 응용 프로그램이 중단됩니다.

3

myString은 null이므로 Length 속성에 액세스하면 NullReferenceException이 발생합니다.

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

내 추측도 당신의 추측이 될 것입니다. –

+0

그럼에도 불구하고 여전히 작동하지 않지만 예외적 인 예외를 처리했습니다. – user3692826

0

당신은 당신의 코드에 오타가 있습니다

내 생각 엔 당신이 원하는 것입니다. 문자열이 아닌 배열의 길이를 가져와야합니다.

코드의 라인을 수행해야합니다

if(_index > (stringArray.Length - 1) || _index < 0) 
관련 문제