2017-06-15 30 views
-2

こんにちは、Stackoverflowの人!C#インデックスが範囲外です - 内容のない配列

私は学校のプロジェクトを作っていますが、現在はプログラム全体が機能していますが、私は失敗に終わりますが、何かを置くのではなく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(); 
     } 

内の情報は私がnull == ipAndSubnetArrayとで固定しようとしたが、それはトリックを行うようには見えませんでした。助言がありますか?もっとコードが必要な場合は、私に知らせてください。

+4

彼らは – TheGeekYouNeed

+0

nullまたは長さ0のためのチェック? –

+0

はあなたがコードをデバッグANそれが失敗した理由を見てみました^^言っFIRST – Gusman

答えて

1

Enterキーを押してipAndSubnetArrayで渡すと、端末や他の入力からデータが入ってきたとします。このとき、ipAndSubnetArraynullとなります。これについてのチェックは最後にあります。トップに移動して、そこにないインデックスにアクセスしないようにします。

ipAndSubnetArray.Length >= 2は、ipAndSubnetArray[1]にアクセスできることを保証するためのものです。あなたはif (ipAndSubnetArray.Length > 1 && ipAndSubnetArray[1].Length > 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() 
} 
+0

恐ろしく、これは感謝しています! :D – NiceDevelopmentq

+0

素晴らしい。それがうまくいくと答えを受け入れるので、他の人は質問に答えます。 – bastijn

関連する問題