2011-09-16 211 views
0
public class loginbal 
{ 
    public static bool match = false ; 

    public bool check(string username, string password) 
    { 
     logindal LGD = new logindal(); 
     DataSet ds1= LGD.logincheck(username, password); 

     int noofrows = ds1.Tables["login"].Rows.Count; 

     for (int i = 0; i < noofrows; i++) 
     { 
      if ((ds1.Tables["login"].Rows[i]["username_l"].ToString() == username) && (ds1.Tables["login"].Rows[i]["password_l"].ToString() == password)) 
      { 
       match = true; 
      } 
     } 

    return match; 
} 

我想回到match,但它不是与受影响的循环SET语句我可以做什么根据的循环值来改变比赛,回到方法来设置?返回全局变量值内循环

+1

为什么'匹配'是静态的? – Oded

+4

以及为什么你首先需要一个变量?只是当你找到一个匹配时返回true。你也永远不会把'match'重置为'false',所以在你找到一次匹配之后,方法总是返回true。 – BrokenGlass

+1

摆脱你的'match'变量。用'return true'替换'match = true',用'return false'替换'return match'。普雷斯托。 – NullUserException

回答

2

由于@BrokenGlass@NullUserException已经指出,不需要变量match,更不用说是一个静态的变量。如果循环找到匹配,则返回true。如果没有,请返回false

public bool check(string username, string password) 
{ 
    logindal LGD = new logindal(); 
    DataSet ds1= LGD.logincheck(username, password); 

    int noofrows = ds1.Tables["login"].Rows.Count; 

    for (int i = 0; i < noofrows; i++) 
    { 
     if ((ds1.Tables["login"].Rows[i]["username_l"].ToString() == username) 
      && (ds1.Tables["login"].Rows[i]["password_l"].ToString() == password)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+0

因为.net编译器无论如何都会这样做,所以不需要.Equals。另外,我宁愿认为返回而不是一个循环是不好的做法,因为你不能写一个函数的流程图。 –

+0

Equals和==之间有一点区别。一个区别是,如果您调用Equals的字符串为null,则会抛出一个空异常。 ==不是这样。 – hatchet

+0

@Ash - 删除了'.equals()'的区别。我的思想陷入了Java模式,谢谢。至于在循环中返回,在阅读你的评论之后,这可能是OP的呼叫。 –