PDA

View Full Version : سوال: از دست خطای Use of unassigned local variable



L_eskandary
یک شنبه 21 شهریور 1389, 12:27 عصر
با سلام خدمت دوستان مهندسم ...
با نهایت شرمندگی ولی من یکی دیگه کم آوردم :



class tt
{
public string get(string str)
{
string status ;
string[] returnValues ;
returnValues = new string[5];
returnValues = str.Split(',');
if (returnValues.Length == 0)
status = "Results:" + "No new incoming were found...";
else if (returnValues.Length > 1)
foreach (string retVal in returnValues)
status = "Results:" + "#1\n" + retVal.ToString();
else
status = "Exception occurred";

return status ;
}

}


برا اینکه با خطای Use of unassigned local variable 'status' مواجه نشم status باید چه طور تعریف کنم ؟

alireza_s_84
یک شنبه 21 شهریور 1389, 12:42 عصر
سلام:

status = ""
یا اینکه:

status = "Exception occurred";
و else آخری رو میتونی حذف کنی.
حله دیگه انشا...

sinashahab
یک شنبه 21 شهریور 1389, 12:47 عصر
این کد صحیح :


public string get(string str)
{
string status;
string[] returnValues;
returnValues = new string[5];
returnValues = str.Split(',');
if (returnValues.Length == 0)
status = "Results:" + "No new incoming were found...";
else if (returnValues.Length > 0)
{
status = "";
foreach (string retVal in returnValues)
status = "Results:" + "#1\n" + retVal.ToString();
}
else
status = "Exception occurred";

return status;
}

شما توی شرط دوم میگید اگه بیشتر از یه آرایه داشت اون حلقه اجرا بشه که کارتون درسته .

ولی VS اون شرط رو درست حساب می کنه ولی برای حلقه امکان خالی بودن هم حساب می کنه.

شما باید قبل از حلقه متغییر رو مقدار دهی کنید.

xm0r741
سه شنبه 03 اسفند 1395, 19:19 عصر
با سلام خدمت دوستان

شرمنده میدونم این تاپیک مال خلی وقت پیشه امانخواستم جدید باز کنم
بنده هم همین مشکل رو دارم وممنون میشم راهنمایی کنید
دوستان کلا من 14تا
if (enumerator is IDisposable)
توی کل برنامم دارم و به همه این 14 تا گیر داده و ول کنم نیس این اولیشه

private void getlnks(string src)
{
try
{
Regex regex = new Regex("\\bhref\\S*=\"/url\\?q=(http://\\S*?)&amp");
MatchCollection matchCollection = regex.Matches(src);
try
{
IEnumerator enumerator = matchCollection.GetEnumerator();
while (enumerator.MoveNext())
{
Match match = (Match)enumerator.Current;
if (match.Groups[1].Value.ToString().StartsWith("http://", StringComparison.CurrentCultureIgnoreCase) && !(match.Groups[1].Value.ToString().Contains("www.google.com") || match.Groups[1].Value.ToString().Contains("www.youtube.com") || match.Groups[1].Value.ToString().Contains("page2rss.com")) && this.URLDecode(System.Convert.ToString(match.Group s[1].Value.ToString())).Contains("=") && this.chklist.InvokeRequired)
{
this.chkadder(this.URLDecode(System.Convert.ToStri ng(match.Groups[1].Value.ToString())));
}
}
}
finally
{
IEnumerator enumerator;
if (enumerator is IDisposable)
{
(enumerator as IDisposable).Dispose();
}
}
}
catch (Exception expr_134)
{
ProjectData.SetProjectError(expr_134);
Exception ex = expr_134;
MessageBox.Show(ex.Message);
ProjectData.ClearProjectError();
}
}


واین از وسط کد هس

public void startb_Click(object sender, EventArgs e)
{
try
{
IEnumerator enumerator = this.GroupBox1.Controls.GetEnumerator();
while (enumerator.MoveNext())
{
Control control = (Control)enumerator.Current;
if (Operators.CompareString(control.Name, "stop2b", false) != 0)
{
control.Enabled = false;
}
}
}
finally
{
IEnumerator enumerator;
if (enumerator is IDisposable)
{
(enumerator as IDisposable).Dispose();
}
}
try
{
IEnumerator enumerator2 = this.GroupBox2.Controls.GetEnumerator();
while (enumerator2.MoveNext())
{
Control control2 = (Control)enumerator2.Current;
control2.Enabled = false;
}
}
finally
{
IEnumerator enumerator2;
if (enumerator2 is IDisposable)
{
(enumerator2 as IDisposable).Dispose();
}
}
this.scnr.RunWorkerAsync();
}
و الی اخر
ممنون راهنمایی کنید
راستی من این کدارو تو vb.net هم نوشتم تو او ارورر نمیده اما وقتی به سی شارپ میام و وینویسم
ارورر میده ممنون

Mahmoud.Afrad
سه شنبه 03 اسفند 1395, 23:50 عصر
متغیرهایی که قبل از try تعریف کردید رو میتونید در finally در صورت نیاز از بین ببرید.
سعی کنید در جایی که امکان ایجاد خطا نیست از try استفاده نکنید. و از متدهای از پیش آماده مثل string.Compare برای مقایسه استفاده کنید.
private void getlnks(string src)
{
Regex regex = new Regex("\\bhref\\S*=\"/url\\?q=(http://\\S*?)&amp");
MatchCollection matchCollection = regex.Matches(src);
foreach (Match match in matchCollection)
{
try
{
if (match.Groups[1].Value.StartsWith("http://", StringComparison.CurrentCultureIgnoreCase) &&
!(match.Groups[1].Value.Contains("www.google.com") ||
match.Groups[1].Value.Contains("www.youtube.com") ||
match.Groups[1].Value.Contains("page2rss.com")) &&
this.URLDecode(match.Groups[1].Value).Contains("=") && this.chklist.InvokeRequired)
{
this.chkadder(this.URLDecode(match.Groups[1].Value));
}
}
catch (Exception expr_134)
{
ProjectData.SetProjectError(expr_134);
Exception ex = expr_134;
MessageBox.Show(ex.Message);
ProjectData.ClearProjectError();
}
finally
{
IDisposable obj = match as IDisposable;
if (obj != null)
{
obj.Dispose();
}
}
}
}

public void startb_Click(object sender, EventArgs e)
{
foreach (Control control in this.GroupBox1.Controls)
{
if (Operators.CompareString(control.Name, "stop2b", false) != 0)
{
control.Enabled = false;
}
}

foreach (Control control2 in this.GroupBox2.Controls)
{
control2.Enabled = false;
}
this.scnr.RunWorkerAsync();
}