1 回答

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊
您的問題出現(xiàn)在您的IsValidRecord
. 您有一個變量 ,blnOK
您可以來回切換它。
變量blnOK
以 開頭true
,然后strFields[0]
被檢查。然后你設(shè)置blnOK
為true
or false
,這很好。但是,您隨后檢查strFields[1]
,并繼續(xù)設(shè)置blnOK
為true
或false
基于該值,而不管之前的檢查是什么。這將貫穿您的所有領(lǐng)域。最終結(jié)果是 的結(jié)果IsValidRecord
將始終是您檢查的最后一個字段的結(jié)果(在本例中為strFields[4]
),無論其他檢查的結(jié)果如何。
解決此問題的簡單方法是,return blnOK;
無論何時將其值更改為false
,這都會導(dǎo)致函數(shù)“短路”,甚至不檢查任何其他字段。失敗的第一個字段將使整批字段失敗。
如果要檢查所有字段,則可以檢查blnOK
每次檢查中的狀態(tài),并且僅在先前檢查中true
未設(shè)置時才將其設(shè)置為false
。
處理此問題的另一種方法是為每個字段設(shè)置一個變量,并返回所有值的集合。就像是:
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;有效,因為僅當(dāng)兩個操作數(shù)都為 時才&&返回。如果其中任何一個值為,則結(jié)果將為。truetruefalsefalse
- 1 回答
- 0 關(guān)注
- 264 瀏覽
添加回答
舉報