Foreach循环仅验证第一个元素

时间:2014-04-09 11:56:41

标签: c# validation if-statement foreach xamarin.ios

我在TextFields循环中使用foreach语句验证if/else。这一切都发生在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

2 个答案:

答案 0 :(得分:9)

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

或者您可以对所有itens有效,为每个项目设置一个attributesplaceholder,如果有任何无效,则返回,如下所示:

  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");
}

答案 1 :(得分:3)

在处理完第一个元素之后,您的代码将始终返回,无论它是否有效。

您可能想要的是验证所有元素并在之后返回

var result = true;
foreach (UITextField item in TextFieldList) {
    if (item.Text == "") {
        item.AttributedPlaceholder = 
         new NSAttributedString (item.Placeholder, foregroundColor: UIColor.Red);
        result = false;
    } 
}

return result;

你只需要记住最后要返回的内容,而不是立即返回。