[英]How to avoid 'Unassigned Local Variable' defined inside a try-catch block
這是我經常面臨的一個錯誤。 雖然我設法通過某種方式繞過它,但它真的讓我很惱火。 在下面的代碼片段中,我想防止來自 myRequest.GetResponse() 的異常
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());
現在,當我嘗試構建/編譯代碼時,它說
“使用未賦值的局部變量‘reader’”
現在我的問題是,如果 try 語句順利運行而沒有拋出任何異常,為什么編譯器不能訪問 try 塊內分配給 reader 的值?
您正在使用一個變量,該變量在該塊之外的 try/catch 塊中分配。 您需要將整個代碼移動到 try 塊中。
您可以像@Svexo 建議的那樣為它分配null
,但是如果流出錯,這將引發異常。
編譯器說use of unassigned variable
因為無論如何都會執行 try/catch 塊之后的代碼。
如果你有一個異常,你捕捉它,然后在它之后運行代碼。 這就是您收到此錯誤的原因。
你可以
null
分配給局部變量,然后在執行其余代碼之前測試它們是否為 null WebRequest myRequest = WebRequest.Create(baseUri.OriginalString);
WebResponse myResponse = null;
Stream myStream= null;
StreamReader reader =null;
這將分配變量
編輯:
如果你這樣做,你應該在你的 try/catch 之外添加一個 if
if(reader != null)
{
Regex regex = new Regex(@"\s*(?i)href\s*=\s*(\""([^""]*\"")|'[^']*'|([^'"">\s]+))", RegexOptions.IgnoreCase);
MatchCollection splits = regex.Matches(reader.ReadToEnd());
}
請注意,在您的情況下,最好將所有內容都放在 try/catch 塊中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.