我搜索了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;
}
答案 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)
你可以为此循环。例如foreach
或for
:
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)