1 回答
TA贡献1866条经验 获得超5个赞
您的问题出现在您的IsValidRecord
. 您有一个变量 ,blnOK
您可以来回切换它。
变量blnOK
以 开头true
,然后strFields[0]
被检查。然后你设置blnOK
为true
or 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 关注
- 232 浏览
添加回答
举报