1 回答
TA贡献1866条经验 获得超5个赞
您的问题出现在您的IsValidRecord. 您有一个变量 ,blnOK您可以来回切换它。
变量blnOK以 开头true,然后strFields[0]被检查。然后你设置blnOK为trueor false,这很好。但是,您随后检查strFields[1],并继续设置blnOK为true或false基于该值,而不管之前的检查是什么。这将贯穿您的所有领域。最终结果是 的结果IsValidRecord将始终是您检查的最后一个字段的结果(在本例中为strFields[4]),无论其他检查的结果如何。
解决此问题的简单方法是,return blnOK;无论何时将其值更改为false,这都会导致函数“短路”,甚至不检查任何其他字段。失败的第一个字段将使整批字段失败。
如果要检查所有字段,则可以检查blnOK每次检查中的状态,并且仅在先前检查中true未设置时才将其设置为false。
处理此问题的另一种方法是为每个字段设置一个变量,并返回所有值的集合。就像是:
private static Boolean IsValidRecord(String[] strFields)
{
Boolean blnOK = true;
Boolean bln0OK = true;
Boolean bln1OK = true;
Boolean bln2OK = true;
Boolean bln3OK = true;
Boolean bln4OK = true;
Decimal decCheck;
//Check all fields that must be validated
if (String.IsNullOrWhiteSpace(strFields[0]))
{
Boolean bln0OK = false;
Console.WriteLine("Error: Unable to Parse First Name!");
}
else
{
bln0OK = true;
}
if (String.IsNullOrWhiteSpace(strFields[1]))
{
bln1OK = false;
Console.WriteLine("Error: Unable to Parse Middle Initial!");
}
else
{
bln1OK = true;
}
if (String.IsNullOrWhiteSpace(strFields[2]))
{
bln2OK = false;
Console.WriteLine("Error: Unable to Parse Last Name!");
}
else
{
bln2OK = true;
}
if (strFields[3].Length == 9)
{
bln3OK = true;
}
else
{
bln3OK = false;
Console.WriteLine("Error: Unable to Parse SSAN!");
}
if (strFields[4] == null)
{
bln4OK = false;
}
else
{
if (Decimal.TryParse(strFields[4], out decCheck))
{
bln4OK = true;
}
else
{
bln4OK = false;
Console.WriteLine("Error: Unable to Parse PayRate!");
}
}
blnOK = bln0OK && bln1OK && bln2OK && bln3OK && bln4OK;
return blnOK;
}
blnOK = bln0OK && bln1OK && bln2OK && bln3OK && bln4OK;有效,因为仅当两个操作数都为 时才&&返回。如果其中任何一个值为,则结果将为。truetruefalsefalse
- 1 回答
- 0 关注
- 276 浏览
添加回答
举报
