【问题标题】:C# Index out of range - Array without contentC# 索引超出范围 - 没有内容的数组
【发布时间】:2017-06-15 19:02:50
【问题描述】:

大家好 Stackoverflow!

我正在做一个学校项目,目前整个程序都在工作,但我想让它防故障,但如果我只是按 ENTER 而不是输入任何信息,我会遇到数组超出范围的问题在。

string[] strIpAddress = ipAndSubnetArray[0].Split('.');
        string[] strSubnetMask = new string[] { "" };
        int[] intSubnetMask = new int[] { };
        string strCIDR = "";
        string cidrSubnetmask = "";

        if (ipAndSubnetArray[1].Length > 2)
        {
            strSubnetMask = ipAndSubnetArray[1].Split('.');
            intSubnetMask = strArray2IntArray(strSubnetMask);
        }
        else if (ipAndSubnetArray[1].Length < 3)
        {
            strCIDR = Convert.ToString(ipAndSubnetArray[1]);
            cidrSubnetmask = cidrTilDeci(Convert.ToInt32(strCIDR));
            strSubnetMask = cidrSubnetmask.Split('.');
            intSubnetMask = strArray2IntArray(strSubnetMask);
        }
        else if (ipAndSubnetArray == null)
        {
            Main();
        }

我尝试使用 ipAndSubnetArray == null 进行修复,但这似乎没有奏效。有什么建议么?如果您需要更多代码,请告诉我。

【问题讨论】:

  • 首先检查 null 或 0 长度
  • 他们说的 ^^
  • 你有没有试过调试代码看看为什么会失败?
  • 另外,如果这部分代码在“Main”函数上并且有人感到无聊并持有返回键,您将遇到StackOverflow异常,

标签: c# arrays indexing range


【解决方案1】:

我假设当您按下回车键时数据来自终端或其他输入,并通过ipAndSubnetArray 传入。当这种情况发生时,ipAndSubnetArray 显然是 null。您对此的检查在最后,将其移至顶部以防止访问任何不存在的索引。

ipAndSubnetArray.Length &gt;= 2 检查是为了保证您可以访问ipAndSubnetArray[1]。你也可以在里面这样做if (ipAndSubnetArray.Length &gt; 1 &amp;&amp; ipAndSubnetArray[1].Length &gt; 2)

if(ipAndSubnetArray != null && ipAndSubnetArray.Length >= 2) {
    string[] strIpAddress = ipAndSubnetArray[0].Split('.');
    string[] strSubnetMask = new string[] { "" };
    int[] intSubnetMask = new int[] { };
    string strCIDR = "";
    string cidrSubnetmask = "";

    if (ipAndSubnetArray[1].Length > 2)
    {
        strSubnetMask = ipAndSubnetArray[1].Split('.');
        intSubnetMask = strArray2IntArray(strSubnetMask);
    }
    else if (ipAndSubnetArray[1].Length < 3)
    {
        strCIDR = Convert.ToString(ipAndSubnetArray[1]);
        cidrSubnetmask = cidrTilDeci(Convert.ToInt32(strCIDR));
        strSubnetMask = cidrSubnetmask.Split('.');
        intSubnetMask = strArray2IntArray(strSubnetMask);
    }
} else {
    Main()
}

【讨论】:

  • 太棒了。如果可行,请接受答案,以便其他人看到问题已得到解答。
猜你喜欢
  • 2021-06-20
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 2013-07-05
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多