2014-12-04 120 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在他的代码中有一个类型,他需要帮助。 – 2014-12-04 18:34:16

+0

你不明白为什么你的异常正在被抛出,或者为什么在构造函数中抛出异常将导致对象不被初始化? – juharr 2014-12-04 18:37:17

+0

我只是想这样的事情: myClass example = myClass(1); - >没关系,我有我的对象 myClass example = myClass(5); - >在控制台中写入错误。 – user3692826 2014-12-04 18:38:57

回答

1

由于您所传递5作为_index到你的构造,如果因为数组的长度为2的条件将是真正的

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

以下5> 1。这会导致代码抛出IndexOutOfRangeException,从而停止构造函数返回对象的实例。此外,如果您的new myClass(5)附近没有try-catch,则该异常会冒泡并导致正在运行的应用程序崩溃。

3

myString为空,因此当您访问Length属性时,您将收到NullReferenceException。

我的猜测是,你想:

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

我的猜测也是你的猜测。 – 2014-12-04 18:33:55

+0

尽管如此,它仍然不起作用,但我处理了那种异常。 – user3692826 2014-12-04 18:36:56

0

你在你的代码中的错字。您需要获取数组的长度而不是字符串。

的代码行应该:

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