0

我有一个包含 5 个验证元素的验证方法,其中 4 个按预期工作,但 1 个没有,问题是为什么不呢?

我遇到的问题是验证“CompetitionCourse”。只有当组合框 cbCourseRound1 不为空时,我才希望 IsValid 为真。目前,无论此组合框是空白还是填充,这都在验证。所有其他验证工作正常,

private bool Validate(Competition compSetup)
        {
            string CompetitionName = compSetup._CompetitionName;
            int CompetitionFormat = compSetup._CompetitionFormatId;
            string CompetitionGender = cbGenderOfCompetiton.Text;
            string CompetitionMarker = cbMarker.Text;
            string CompetitionCourse = cbCourseRound1.Text;

            if (!CompetitionName.Equals(string.Empty) && !CompetitionGender.Equals("Mixed") && CompetitionFormat.Equals(1) && !CompetitionCourse.Equals(string.Empty) &&
                ((CompetitionGender.Equals("Female") && CompetitionMarker.Equals("Red")) || (!CompetitionGender.Equals("Female") && !CompetitionMarker.Equals("Red"))))
            {
                IsValid = true;
            }
            else
            {
                IsValid = false;
            }
            return IsValid;
        }
4

6 回答 6

1

取决于里面有什么CompetitionCourse。您必须通过调试代码自行检查。

如果 ComboBox 文本字段为空白,则最好明确确保CompetitionCourse包含null(因为我怀疑它包含“”):

CompetitionCourse = (string.IsNullOrEmpty(cbCourseRound1.Text)) ? null : cbCourseRound1.Text;
于 2013-02-04T12:53:52.843 回答
0

可能您应该尝试修剪文本框周围的空白。例如,txtName.Trim();

于 2013-02-04T15:55:52.453 回答
0

目前,无论此组合框是空白还是填充,这都在验证。

检查组合框的Items属性,而不是TextProperty 之类的。

cbCourseRound1.Items != null && cbCourseRound1.Items.Count > 0
于 2013-02-04T12:49:33.110 回答
0

首先,使用.Equalsfor 字符串是非常 Java 的。C# 有运算符重载,看起来好多了:

if(CompetitionName!="" && CompetitionGender!="Mixed" ...)

至于测试本身,你需要设置一个断点,看看 `CompetitionCourse 有什么。我的猜测是它不是一个空字符串,而是其中有一些空格。尝试使用

...!CompetitionCourse.Trim()!=""
于 2013-02-04T12:50:09.723 回答
0

您的代码很难阅读,我将尝试简化它:

private bool Validate(Competition compSetup)
{
    bool isValid = cbGenderOfCompetiton.Text != "Female" && cbMarker.Text == "Red";
    if (!isValid)
    {
        isValid = !string.IsNullOrEmpty(compSetup._CompetitionName);
        if (isValid)
            isValid = compSetup._CompetitionFormatId.Text == "Female";// this is redundant: cbGenderOfCompetiton.Text != "Mixed";
        if (isValid)
            isValid = CompetitionFormat == 1;
        if (isValid)
            isValid = cbCourseRound1.SelectedIndex != -1;
        if (isValid)
            isValid = cbMarker.Text == "Red"; 
    }
    return isValid;
}

请注意,我使用了SelectedIndex代替,Combobox.Text因为它不太容易出错。

于 2013-02-04T13:03:19.153 回答
0

不要使用 !Equals,而是使用 IsNullOrWhitespace 或 IsNullOrEmpty。它工作得更好。

于 2013-02-04T13:18:36.663 回答