比较

狮子

知名会员
已加入
2018年11月29日
留言内容
52
编程经验
Beginner
你好
我正在尝试进行比较,这使我感到困惑
我首先提取ID号码中与性别有关的部分。 0001-4999是女性,而5000-9999是男性。
然后,我看到正在选择的性别,然后进行比较
在我的测试中,我将性别部分设为5001,并根据以下代码选择女性。这应该在if条件下运行代码,但它认为计算结果为true,但认为它为false。我做错了什么吗
C#:
string genderSegment = nationalIdstring.Substring(6, 4);
int genderSegmentInt = Convert.ToInt32(genderSegment);
string genderString = addStudentGenderCodeComboBox.SelectedValue.ToString();
string maleGender = "M";
 string femaleGender = "F";
if ((genderSegmentInt > 4999) && (genderString == femaleGender))
   {
        isValidated = false;
        validationErrorMessage.Append("The gender does not match portion in ID");
        validationErrorMessage.Append(Environment.NewLine);
  }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
我愿意打赌 性别字符串 is not "F"。您是否在 如果 语句,实际上查看了该行上正在使用的每个值?如果不是,那是您需要做的,并且在发布到这里之前应该做的事情。如果 sexSegmentInt 确实大于4999,并且 性别字符串 really is equal to "F"那么您的系统就坏了。
 

狮子

知名会员
已加入
2018年11月29日
留言内容
52
编程经验
Beginner
谢谢。我已经完成了消息框的快速测试,而且一切似乎都还可以,这就是为什么我很困惑,但是现在我会做断点了
 

狮子

知名会员
已加入
2018年11月29日
留言内容
52
编程经验
Beginner
我设置了断点,genderString是"F"而且sexSegmentInt为5001,但它跳过了整个块。我只是想知道我的语法是否正确。我会解决更多问题
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
语法看起来正确,并且应该基于这些值执行该块,因此我只能假设您没有提供某些信息。我建议使用“监视”或“立即”窗口来评估该布尔表达式的两个部分,看看哪个没有给出预期的结果,我仍然怀疑该字符串包含意外字符等,因此您可能应该更仔细地检查一下。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
就个人而言,我会做这样的事情:
C#:
enum Gender
{
    Female,
    Male
}

Gender GetGenderFromRange(int value)
{
    if (value < 1 || value > 9999)
        throw new ArgumentOutOfRangeException(nameof(value));
    return value < 5000 ? Gender.Female : Gender.Male;
}

Gender GetGenderFromChar(char ch)
{
    ch = char.ToUpper(ch);
    if (ch == 'F')
        return Gender.Female;
    else if (ch == 'M')
        return Gender.Male;
    throw new ArgumentOutOfRangeException(nameof(ch));
}

Gender GetGenderFromString(string s) => GetGenderFromChar(s[0]);

:

isValid = GetGenderFromRange(genderSegmentInt) == GetGenderFromString(genderString);
if (!isValid)
        validationErrorMessage.AppendLine("The gender does not match portion in ID");

这使代码的意图更加清晰。如果数字中的性别与字符串中的性别相同,则当前表格有效。如果不匹配,则该表格必须无效。并且您获得了附带好处,即如果传递了无效数据,则会引发异常,这将暗示有关输入的其他问题。
 
最佳 底部