Строка не назначается после метки в c # - PullRequest
0 голосов
/ 31 августа 2018

У меня есть проблема, которую я совершенно не понимаю:

В следующем коде используется строка path. Путь работает перед меткой, но впоследствии он не назначен. Смущает меня, все остальные переменные работают!

Код:

path = @"C:\incidents\jobTransfer";
File.WriteAllLines(path + incident + "\\result_" + incident + ".txt", resultText.ToArray());
End:;
File.WriteAllLines(incident, resultText.ToArray());
File.WriteAllLines(path + incident + "\\result_" + incident + ".txt", resultText.ToArray()); // issue at path in this line

enter image description here

Использование неназначенной переменной ...

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

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Поскольку вы используете метку - что редко встречается в C # выше, эта метка, по сути, является одной областью, а после нее - другой, поэтому объявленная переменная больше не находится в области действия, поэтому она больше не назначается, вы ' Вам нужно будет объявить эту переменную вне использования метки - или вообще не использовать метку, так как это не является обычной практикой в ​​C #

0 голосов
/ 31 августа 2018

Скорее всего, проблема заключается в вашей метке - это позволяет пути кода, который переходит на вашу метку «Конец», что позволяет не указывать «путь».

2 простых решения:

  • Переназначить "path = @" C: \ инциденты \ jobTransfer ";" после метки «Конец», о которой вы упомянули, проблематично, поскольку у вас будет два места для редактирования кода в случае его изменения. (хотя, если вы параметризируете его в каком-либо файле конфигурации, вы можете изменить его один раз).
  • Поместите метку над исходным назначением «пути» и используйте некоторые условия, чтобы пропустить ваши «File.WriteAllLines (путь + инцидент +" \ result_ "+ инцидент +" .txt ", resultText.ToArray ());" если это не желательно.

Лучшим решением было бы вообще не использовать ярлыки - они обычно осуждаются, и ваша проблема - одна из многих причин; хотя, прежде чем все начнут прыгать в глотку за использование goto, есть несколько вполне приемлемых причин использовать его .

0 голосов
/ 31 августа 2018

Где-то у вас есть:

string path;

Сделать это

string path = null;

и это решит вашу проблему.


Хотя он назначен null, путь не является неназначенным для метки.

Но, раз уж я об этом подумал, возможно, вы имели в виду:

string path = @"C:\incidents\jobTransfer";

Таким образом, он назначается и имеет действительное значение с самого начала.

См. эту скрипку :


пример

    string path;
    goto End;
AnotherLabel:
    path = @"C:\incidents\jobTransfer";
    Console.WriteLine(path);
End:;
    // issue at path in this line
    Console.WriteLine(path);

исправление

    string path = null;
    goto End;
AnotherLabel:
    path = @"C:\incidents\jobTransfer";
    Console.WriteLine(path);
End:;
    // no issue at path in this line
    Console.WriteLine(path);

Предложение

    string path = @"C:\incidents\jobTransfer";
    goto End;
AnotherLabel:
    Console.WriteLine(path);
End:;
    // no issue at path in this line
    Console.WriteLine(path);

посоветуете

    // don't use labels, due to these kinds of obscurities ;-)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...