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

Foreach循环只验证第一个元素

试试这个:如果有任何无效字段,则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;

你只需要记住最后要返回什么,而不是立即返回。