我在我的代码中调用了三个函数,我想验证我的一些字段。 当我尝试使用下面给出的代码时。它仅检查第一个值,直到它得到错误的结果。
我想要一些类似的东西,如果fisrt函数返回true,那么它也应该调用next函数,依此类推。可以用什么来代替Or Operator来做到这一点。
if (IsFieldEmpty(ref txtFactoryName, true, "Required") ||
IsFieldEmpty(ref txtShortName, true, "Required") ||
IsFieldEmpty(ref cboGodown, true, "Required"))
{ }
修改
public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider,string msgToShowOnError)
{
ErrorProvider EP = new ErrorProvider();
if (txtControl.Text == string.Empty)
{
EP.SetError(txtControl, msgToShowOnError);
return true;
}
else
{
EP.Clear();
return false;
}
}
请评论,这个方法是否可以使用ref变量作为参数之一。
我正在winform
检查onSubmit事件的验证。
答案 0 :(得分:10)
您可以将单个|
用于OR:
if (IsFieldEmpty(ref txtFactoryName, true, "Required") |
IsFieldEmpty(ref txtShortName, true, "Required") |
IsFieldEmpty(ref cboGodown, true, "Required"))
{ }
双管||
正在执行short-circuit evaluation,single version |
会进行全面评估。
&&
和&
也是如此。
请参阅MSDN reference。
对修改:
的回应IsFieldEmpty
不对txtControl进行任何更改。您可以重命名为CheckFieldEmpty
以进一步改进它。EP.Clear();
替换为Ep.SetErrortxtControl, "");
答案 1 :(得分:10)
明确说明你在做什么:
bool isFactoryNameEmpty = IsFieldEmpty(ref txtFactoryName, true, "Required");
bool isShortNameEmpty = IsFieldEmpty(ref txtShortName, true, "Required");
bool isGodownEmpty = IsFieldEmpty(ref cboGodown, true, "Required");
if (isFactoryNameEmpty || isShortNameEmpty || isGodownEmpty)
{
// ...
}
(另外,我假设您需要调用所有三个函数,因为它们有副作用?在这种情况下IsFieldEmpty
是一个非常糟糕的名称。)
答案 2 :(得分:6)
你为什么需要它?我能想到的唯一原因是你的“IsFieldEmpty”函数也在对数据进行一些计算或更改,这让我很担心。名为“IsFieldEmpty”的函数实际上不应该执行任何其他操作。
在这种情况下,从可用性/可维护性的角度来看,你最好用:
SomeFieldMaintenance(ref txtFactoryName, true, "Required")
SomeFieldMaintenance(ref txtShortName, true, "Required")
SomeFieldMaintenance(ref cboGodown, true, "Required")
if (IsFieldEmpty(txtFactoryname) ||
IsFieldEmpty(txtShortName) ||
IsFieldEmpty(cboGodown))
{ }
或类似的东西。
答案 3 :(得分:0)
您所看到的被称为C#中的短路。如果第一个表达式失败,那么它将不会费心去尝试下一个表达式,因为最终结果已经确定。
http://johnnycoder.com/blog/2006/08/02/short-circuit-operators-in-c/
你应该|而不是||得到你的结果。
if (IsFieldEmpty(ref txtFactoryName, true, "Required") |
IsFieldEmpty(ref txtShortName, true, "Required") |
IsFieldEmpty(ref cboGodown, true, "Required"))
C#运营商 http://msdn.microsoft.com/en-us/library/6a71f45d.aspx
||运营商。 http://msdn.microsoft.com/en-us/library/6373h346.aspx
答案 4 :(得分:0)
到目前为止,答案假设您要验证所有字段,即使其中一个字段失败也是如此。您的原始问题中没有明确这一假设。因此,如果您不介意在一个字段失败时停止验证,那么最简单的解决方案是使用&&运算符而不是||。这将实现您的既定目标:“如果第一个函数返回true,那么它也应该调用next函数,依此类推”。但是,如果第一个函数返回false,则不会调用任何其他函数,这可能不是您想要的。