Questo è un errore che devo affrontare regolarmente. Anche se riesco ad aggirarlo usando un modo o un altro, mi infastidisce davvero. Nel frammento di codice qui sotto, voglio salvaguardare contro le eccezioni da myRequest.GetResponse()Come evitare 'Variabile locale non assegnata' definita all'interno di un blocco try-catch
WebRequest myRequest = WebRequest.Create(baseUri.OriginalString);
WebResponse myResponse;
Stream myStream;
StreamReader reader;
try
{
myResponse = myRequest.GetResponse();
myStream = myResponse.GetResponseStream();
reader = new StreamReader(myStream);
}
catch (WebException status)
{
txtConsole.AppendText("Error in GetLinks::WebException\n" + status.Response);
txtConsole.AppendText(Environment.NewLine);
}
catch
{
txtConsole.AppendText("Some error in GetLinks");
txtConsole.AppendText(Environment.NewLine);
}
Regex regex = new Regex(@"\s*(?i)href\s*=\s*(\""([^""]*\"")|'[^']*'|([^'"">\s]+))", RegexOptions.IgnoreCase);
MatchCollection splits = regex.Matches(reader.ReadToEnd());
Ora, quando provo ad installare/compilare il codice, si dice
"L'utilizzo di non assegnato variabile 'reader' locale"
Ora la mia domanda, se istruzione try fili liscio, senza alcuna eccezione gettati, perché non può accedere compilatore il valore assegnato per il lettore all'interno del blocco try?
Ho usato per spostare tutto all'interno del blocco try. Ma poi ho capito che non potevo farlo sempre. Tuttavia, assegnarlo a null e quindi verificare l'eccezione NULL dopo l'istruzione catch è ciò che devo fare. – SLearner
L'uso di 'reader' dopo il blocco try rivela una dipendenza: il codice dipende dal corretto ritorno del blocco try. Per definizione, questo dovrebbe essere incluso nel blocco try. Quando ciò diventa ingestibile, dovrai usare "null" e quindi sperare che tu controlli sempre nulla. – jpaugh