这是我的代码,它会为flag = false;
public bool Check_Contact(string username)
{
bool flag=false;
bool str;
IEnumerator enumerator = this.All_Contacts_dt.Rows.GetEnumerator();
try
{
do
{
str = enumerator.MoveNext();
if (str)
{
DataRow current = (DataRow)enumerator.Current;
str = !(current["Username"].ToString() == username);
}
else
{
flag = false;
return flag;
}
}
while (str);
flag = true;
return flag;
}
finally
{
IDisposable disposable = enumerator as IDisposable;
str = disposable == null;
if (!str)
{
disposable.Dispose();
}
}
flag = false;
return flag;
}
代码中的问题是什么?感谢
答案 0 :(得分:7)
问题是确实永远不会达到flag = false;
。您的try
块以返回结束。所以可能性是:
return
语句。在finally
块运行后退出该方法。return
声明之前有一个例外。运行finally
块,并将异常传递给调用方法,直到找到匹配的catch
块。 finally
块中有一个例外。停止执行该块,并将异常传递给调用方法,直到找到匹配的catch
块。因此,无论如何,都不会达到flag = false;
。
答案 1 :(得分:3)
代码执行离开try
块的唯一方法是通过其return
语句,这意味着finally
块后面的任何代码都不会被执行。
try
{
// ...
return flag; // Control returns to caller here (after executing finally block).
}
finally
{
// ...
}
// Execution never reaches this point.
flag = false;
return flag;