2013-07-29 7 views
1

Я новичок здесь, и я пытался просматривал старые вопросы, но я новичок в C#, а также, и я нахожу, что трудно решить мою проблему ниже:ссылка на объект не указывает на экземпляр объекта EDIT

if (File.Exists(@"C:\ESC\Impostazioni.txt")) 
{ 
    TextReader lettore_file = new StreamReader(@"C:\ESC\Impostazioni.txt"); 
    String opzioni = lettore_file.ReadLine(); 

    int i; 
    for (i = 0; i < opzioni.Length; i++) <----here, indicating "i=0" 
    { 
     if (opzioni[i] == '-') 
     { 
      char[] coloregenerale = new char[i]; 
      for (int j = 0; j < i; j++) 
       coloregenerale[j] = opzioni[j]; 

      break; 
+0

Что такое значение 'opzioni' ? Я буду держать пари, что это «нуль». – gunr2171

+1

Если EOF находится на первой строке, ваша 'ReadLine' вернет' null'. Убедитесь, что ваш файл существует и содержит текст. –

+0

Вы пытались установить точку останова и отлаживать код, чтобы точно определить, где именно это происходит? Если вы можете сказать нам, где именно он терпит неудачу, вам будет легче помочь. –

ответ

6

Вы должны поставить галочку, чтобы увидеть, если значение строки является нулевым или пустым, прежде чем пытаться перебрать каждый символ, например:

if(!String.IsNullOrEmpty(opzioni)) 
{ 
    // Put loop through character logic here 
} 
+0

правый, он никогда не использовался – maxpesa

3

Вам необходимо отладить до конца и узнать, если ваш opzioni строки нулевая ссылка после вашего звонка на String opzioni = lettore_file.ReadLine();

Кроме того, вы должны, вероятно, объявить i в цикле for, а не перед ним, как показано ниже.

for (int i = 0; i < opzioni.Length; i++)

+0

разъяснение для maxpesa: объявление 'i' внутри цикла не требуется, хотя оно считается« нормальной »практикой, так как не только переменная, разрушенная при выходе из цикла, но также выглядит хорошо тоже –

+0

Да, я не хотел сказать, что это вызывало проблему, но хотелось указать на то, что является нетипичным. – Jim

+0

yup! и я согласен. Я просто не хотел, чтобы там было какое-то замешательство. –

0

Если нулевая ссылка исключение происходит на указанной линии, преступник, вероятно, opzioni переменной. Если предыдущий вызов lettore_file.ReadLine() возвращает значение null, opzioni будет null, когда вы попытаетесь получить его длину в цикле for. Это вызовет исключение, которое вы испытываете. Решение состоит в том, чтобы проверить эту переменную для нуль перед входом в цикл

1

Есть несколько неправды внутри этого кода:

Вы пропускаете using statement.

Вы не проверяете результат StreamReader.ReadLine.

Похоже, вы переоцениваете string.Substring.

Пример:

if (File.Exists(@"C:\ESC\Impostazioni.txt")) 
{ 
    using (var letterFile = new StreamReader(@"C:\ESC\Impostazioni.txt")) 
    { 
     var opzioni = letterFile.ReadLine(); 

     if(string.IsNullOrWhiteSpace(opzioni)) 
     { 
      // end of file 
     } 

     var dashIndex = opzioni.IndexOf("-"); 

     string coloregenerale = dashIndex > -1 
            ? opzioni.Substring(0, dashIndex) 
            : opzioni; 
    } 
} 
0

opzioni может иметь шансы null значения, на определенном индексе, лучше ручки внутри этой линии с IsNullorEmpty Состояние

char[] coloregenerale = new char[i]; 
      for (int j = 0; j < i; j++) 
       { 
       if(String.IsNullOrEmpty(opzioni[j] == false) // This is mandatory check at this place 
       coloregenerale[j] = opzioni[j]; 
       } 
Смежные вопросы