2017-10-12 1 views
0

J'apprends à faire des tableaux multidimensionnels et j'obtiens cette erreur de référence en essayant de remplir le tableau. Quelqu'un a des idées?Multidimensional Array Référence d'objet non définie sur une instance d'un objet

public static string[][] itemLines; 


    public static void readTxtFile() 
    { 
     try 
     { 
      string[] lines = new string[420]; 

      using (StreamReader sr = new StreamReader(TextFileDirectory.fileDirectoryThree)) 
      { 
       int counter = 0; 
       while (!sr.EndOfStream) 
       { 
        lines[counter] = sr.ReadLine(); //All lines are in an array index 
        counter++; 
       } 
      } 

      for (var i = 0; i < lines.Length; i++) 
      { 
       itemLines[i] = lines[i].Split('Ü'); //All lines are in multiplexed array 
       Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]);   
      } 

      } 
     }  
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
    } 

Ceci donne un coup de pied à mes fesses. Je n'arrive pas à comprendre cela.

Editer: J'ai trouvé la réponse. Je devais avoir une variable de compteur et déclarer les tableaux correctement avec.

+0

quelle ligne do u obtenir l'erreur? –

+0

itemLines [i] = lignes [i] .Split ('Ü'); // Toutes les lignes sont dans un tableau multiplexé – randomnessthatsfunny

+0

Si 'lines [i]' est nul, alors la méthode 'Split' peut lancer NRE. Selon le contenu du fichier lu par 'StreamReader', il est possible d'avoir une chaîne nulle. –

Répondre

-1

Vous devez d'abord initialiser tableau

itemLines=new string[10][]; 

cette erreur sortira

et

vous obtiendrez une erreur sur cette ligne aussi

Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]); 

Si la déclaration précédente n'a pas de données pour séparer itemLines [i] [0] va être nul, à s olve ceci vérifie avoir un élément sur un nœud particulier en utilisant if instruction

if(itemLines[i]!=null && itemLines[i].Length>0) 
Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]); 
+0

cela lancera quand même un pointeur nul. itemLines est toujours null –

1

Un tableau est un objet. Tous les objets doivent être initialisés. L'objet que vous avez créé au début public static string[][] itemLines n'a jamais été initialisé. Vous avez créé un tableau à deux dimensions, qui est un tableau de tableaux. itemLines[i] = .. accède à l'élément i de l'objet tableau itemLines (qui est à nouveau un tableau de tableaux). En d'autres termes, ce que vous faites est égal à ceci:

int[] i; 
i[0] = 8; 

Ce qui précède ne fonctionnera pas parce que je n'ai jamais été initialisé.

initialisation Exemple:

string[][] myArr = new string[9][]; 
string[][] myArr2 = new string[9][8];