C# 构造函数C中的IndexOutfrance#

C# 构造函数C中的IndexOutfrance#,c#,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) {

我有一个简单的类,类似这样:

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
{
公共静态只读字符串[]stringArray={“一”,“二”};
私有字符串myString;
公共myClass(整数索引)
{
if(_index>(stringArray.Length-1)| | u index<0)
{
抛出新的IndexOutOfRangeException(“坏索引”);
}
其他的
{
myString=stringArray[_index];
}
}
}
我正在运行简单的构造函数:myClass示例=myClass(5);我犯了个错误。 它不应该在没有尝试创建新对象的情况下离开构造函数

我不明白扔在那里是怎么回事



编辑:对不起,我弄错了。if部分中应该有stringArray.Length-1

myString
为空,因此当您访问
Length
属性时,您会得到一个NullReferenceException

我猜你想要:

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

myString
为空,因此当您访问
Length
属性时,您将获得一个NullReferenceException

我猜你想要:

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

您的代码中有一个输入错误。您需要获取数组的长度,而不是字符串的长度

代码行应:

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

您的代码中有一个输入错误。您需要获取数组的长度,而不是字符串的长度

代码行应:

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

因为您要将5作为
\u索引传递给构造函数,所以以下if条件将为真

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

因为数组的长度是2,5>1。这会导致代码抛出
IndexOutOfRangeException
,从而阻止构造函数返回对象的实例。此外,如果在新的myClass(5)
周围没有
try catch
,则异常将冒泡并导致正在运行的应用程序崩溃

因为您要将5作为
\u索引传递给构造函数,所以下面的if条件将为true

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

因为数组的长度是2,5>1。这会导致代码抛出
IndexOutOfRangeException
,从而阻止构造函数返回对象的实例。此外,如果在新的myClass(5)
周围没有
try catch
,则异常将冒泡并导致正在运行的应用程序崩溃

我的猜测也是你的猜测。尽管如此,它仍然不起作用,但我处理了那种异常。我的猜测也是你的猜测。尽管如此,它仍然不起作用,但我处理了那种异常。这不是重复。OP的代码中有一个类型,他需要帮助。你不明白为什么会抛出异常,或者为什么在构造函数中抛出异常会导致对象无法初始化吗?我只想要这样的东西:myClass示例=myClass(1);->没关系,我的对象myClass示例=myClass(5);->在控制台中写入错误。这里的问题是:为什么myClass示例=myClass(5);抛出表达式?这不是重复的。OP的代码中有一个类型,他需要帮助。你不明白为什么会抛出异常,或者为什么在构造函数中抛出异常会导致对象无法初始化吗?我只想要这样的东西:myClass示例=myClass(1);->没关系,我的对象myClass示例=myClass(5);->在控制台中写入错误。这里的问题是:为什么myClass示例=myClass(5);抛出一个表达式?