Foreach循环只验证第一个元素
本文关键字:第一个 元素 验证 循环 Foreach | 更新日期: 2023-09-27 17:57:38
我正在用一个包含if/else
语句的foreach
循环验证TextFields
。这一切都发生在public virtual Boolean Method()
内部。只有第一个元素得到了验证,我不知道为什么其他元素没有得到验证。
我必须如何更改我的方法才能验证TextFieldList
中的所有项目?
这是我的方法:
public virtual Boolean ValidateTextFields(){
foreach (UITextField item in TextFieldList) {
if (item.Text == "") {
item.AttributedPlaceholder = new NSAttributedString (item.Placeholder, foregroundColor: UIColor.Red);
return false;
} else {
return true;
}
}
return true;
}
编辑:
我已经工作了,但现在我有另一个问题,我有多种方法,比如ValidateTextFields
,我这样检查它们:
if (ValidateTextFields() && ValidateEmail() ) {
Console.WriteLine ("CONTINUE TO NEXT SCREEN");
} else {
Console.WriteLine ("ERRORRRRRR");
}
现在,如果ValidateTextFields()
是false
,则ValidateEmail()
永远不会被调用,因此EmailTextFields
不会被验证。只有在ValidateTextFields()
是true
之后,我才能验证ValidateEmail()
。有没有办法同时调用这两个方法并检查它们是否为true
?
试试这个:如果有任何无效字段,则Method返回false,否则如果所有字段都有效,则返回true。
public virtual Boolean ValidateTextFields(){
foreach (UITextField item in TextFieldList) {
if (item.Text == "") {
item.AttributedPlaceholder = new NSAttributedString (item.Placeholder, foregroundColor: UIColor.Red);
return false;
}
}
return true;
}
或者,您可以使所有iten有效,为每个项目放置一个attributedplaceholder,并在有任何无效项时返回,如下所示:
public virtual Boolean ValidateTextFields(){
bool hasInvalidFields = false;
foreach (UITextField item in TextFieldList) {
if (item.Text == "") {
item.AttributedPlaceholder = new NSAttributedString (item.Placeholder, foregroundColor: UIColor.Red);
hasInvalidFields = true;
}
}
return !hasInvalidFields;
}
对于您的编辑,要调用您可以调用的所有验证:
bool validTextFields = ValidateTextFields();
bool validEmails = ValidateEmail();
if ( validTextFields && validEmails) {
Console.WriteLine ("CONTINUE TO NEXT SCREEN");
} else {
Console.WriteLine ("ERRORRRRRR");
}
无论第一个元素是否有效,您的代码总是会在处理完后返回。
您可能想要的是验证所有元素,然后返回:
var result = true;
foreach (UITextField item in TextFieldList) {
if (item.Text == "") {
item.AttributedPlaceholder =
new NSAttributedString (item.Placeholder, foregroundColor: UIColor.Red);
result = false;
}
}
return result;
你只需要记住最后要返回什么,而不是立即返回。