Так что я довольно новичок в C# (не в общем программировании), и я написал код с почти ошибкой обработки нуля, чтобы сделать доказательство концепции для работы только в VS. Теперь я готов к созданию некоторой обработки ошибок в приложении, чтобы приложение могло быть развернуто. Итак, теперь у меня возникают проблемы с выяснением того, как/где объявлять переменные, чтобы я мог правильно настроить блок Try Catch.Правильный способ объявить переменную для использования за пределами блока try
Так с примитивными типами я просто создать переменную вне блока
Перед:
String TheString = "Some times I break";
SomeFunctionThatBreaks(TheString);
SomeFunctionThatDoesntBreak(TheString);
После:
String TheString ="";
Try
{
TheString="Some Times I break";
SomeFunctionThatBreaks(TheString);
}
Catch
{
MessageBox.Show("Error")
return false;
}
SomeFunctionThatDoesntBreak(TheString);
Однако со сложными типами, такими как FileStream Я не уверен, надлежащего способа создания ПУСТОЙ переменной для последующего использования:
Befo Re:
FileStream SourceFile = File.OpenRead(TheFile);
StreamReader sr ; = new StreamReader(SourceFile);
char[] block = new char[3];
byte[] header = new byte[6];
SourceFile.Read(header, 0, 6);
SourceFile.Seek(0, 0);
encoding = (header[1] == 0 && header[3] == 0 && header[5] == 0) ? Encoding.Unicode : Encoding.UTF8;
sr.ReadBlock(block, 0, 3);
String sBlock = new String(block);
SourceFile.Seek(0, 0);
if(sBlock=="ABC")
{
MyFunction(SourceFile);
}
причины ошибки компиляции:
FileStream SourceFile ;
String sBlock ="";
Encoding encoding;
StreamReader sr;
try
{
SourceFile = File.OpenRead(TheFile);
sr = new StreamReader(SourceFile);
char[] block = new char[3];
byte[] header = new byte[6];
SourceFile.Read(header, 0, 6);
SourceFile.Seek(0, 0);
encoding = (header[1] == 0 && header[3] == 0 && header[5] == 0) ? Encoding.Unicode : Encoding.UTF8;
sr.ReadBlock(block, 0, 3);
sBlock = new String(block);
SourceFile.Seek(0, 0);
}
catch (Exception ex)
{
String Error = "Error Accessing: " + TheFile + " System Message: " + ex.Message;
EventLog.LogEvent(dtmLogging.LogEventType.Error, Error);
MessageError(Error, "MyFunction()");
}
if(sBlock=="ABC")
{
MyFunction(SourceFile); //THIS LINE DOES NOT COMPILE: Use of unassigned variables
}
Предлагаемые изменения: // Если я это приложение изменений, кажется, работает хорошо, но я не уверен, что это «правильный»
FileStream SourceFile =null;
String sBlock ="";
Encoding encoding = null;
StreamReader sr = null;
Спасибо за любую помощь
Это красная ошибка, которая не позволяет мне компилировать или отлаживать. Я знаю разницу – Cade
Я не понимаю, почему вы не делаете то, что делали раньше - назначьте переменную (ы) вне блока try. Если для сложных типов вы думаете, что может быть исключение, возникшее во время строительства или инициализации. В этом случае непризнанная ошибка var указывает на действительную проблему - вы не знаете, была ли построена/инициализирована переменная после блока try. – hatchet
Я отредактировал код, чтобы включить строку, которая вызывает ошибку – Cade