列出<t>移动到下一个元素</t>

时间:2012-08-30 14:18:31

标签: c# asp.net collections

我搜索了SO并找到了一些帖子,但无法让他们工作。

问题:如何循环到我的列表集合中的下一个项目(custLoginHist [1]等)?

    List<eCommCustomer.oCustomer> custLoginHist = new List<eComm.oCustomer>();
    eCommCustomerDAL.GetCustomerPrevLogin(custLoginHist, oCust);

    if (custLoginHist.Count > 0)
    {
        eCommSecurityFactory oSecFactory = new eCommSecurityFactory();
        if (oCust.CustHash == oSecFactory.CreateHash(custLoginHist[0].CustSalt, custLoginHist[0].CustHash))
        {
            //Password has been used before;
            return false;
        }
        else
        {
            // Valid password;
            return true;
        }
    }
    return true;
}

6 个答案:

答案 0 :(得分:5)

foreach(eCommCustomer.oCustomer cust in custLoginHist)
{
  //Do something with cust here.
}

OR:

for(int i = 0; i != custLoginHist.Count; ++i)
{
  eCommCustomer.oCustomer cust = custLoginHist[i];
  //Do something with cust here.
}

在这种情况下,我们希望为任何单个匹配返回false,否则返回true,所以:

foreach(eCommCustomer.oCustomer cust in custLoginHist)
  if(oCust.CustHash == oSecFactory.CreateHash(custLoginHist[0].CustSalt, custLoginHist[0].CustHash)
    return false;
return true;//if we reached here, no matches.

但这是一个坏主意,因为你已经更容易进入系统。如果我尝试将密码设置为某些内容,并且您拒绝,我现在知道您的某个用户使用了该密码。尽管你应该通过质量检查来阻止一些更可能的违法者(“密码”,“密码1”等),但你最好让这种情况发生。

答案 1 :(得分:3)

List<eCommCustomer.oCustomer> custLoginHist = new List<eComm.oCustomer>();
eCommCustomerDAL.GetCustomerPrevLogin(custLoginHist, oCust);

foreach (var custLogin in custLoginHist)
{
    eCommSecurityFactory oSecFactory = new eCommSecurityFactory();
    if (oCust.CustHash == oSecFactory.CreateHash(custLogin.CustSalt, custLogin.CustHash))
    {
        //Password has been used before;
        return false;
    }
}
return true;

尝试这样的事情,也许你必须自定义你的退货声明,但它应该让你了解它的工作原理。

答案 2 :(得分:2)

foreach(var item in yourList)
{
   //Iterate;
}

如果你想要休息,你可以使用:break;

如果你想要完成,你可以使用:continue;

答案 3 :(得分:2)

List<T>实施IEnumerable<T>,因此您可以使用foreach,或者如果您能够在循环中修改T,则可以使用for

foreach(var item in custLoginHist)
{

}

for (int i = 0; i < custLoginHist.Count; i++)
{

}

然后,如果你需要在完成之前退出循环(例如,如果条件为真,你可以使用break;退出循环,或者你可以{{1}如果你想返回一个值,也可以从循环开始。

答案 4 :(得分:1)

你可以为此循环。例如foreachfor

foreach (var custLogin in custLoginHist)
{
    eCommSecurityFactory oSecFactory = new eCommSecurityFactory();
    if (oCust.CustHash == oSecFactory.CreateHash(custLogin.CustSalt, custLogin.CustHash))
    {
        //Password has been used before;
        return false;
    }
    else
    {
        // Valid password;
        return true;
    }
}

答案 5 :(得分:1)

List<eCommCustomer.oCustomer> custLoginHist = new List<eComm.oCustomer>();
eCommCustomerDAL.GetCustomerPrevLogin(custLoginHist, oCust);



return custLoginHist.Select(c=>oSecFactory.CreateHash(c.CustSalt,c.CustHash))
                    .Any(x=>x==oCust.CustHash)