首页 > 解决方案 > 我的代码可能有什么问题?

问题描述

我正在尝试解决另一个问题。如果存储在 string(id) 中的字符不等于 13,则程序必须显示“Invalid Length”,这些字符输入到文本框中txtId。但是,每当满足此条件时,我都会收到错误消息

System.ArgumentOutOfRangeException: '索引和长度必须引用字符串中的位置。参数名称:长度'

        string id = txtId.Text.Substring(0, 13);
        if (!(id.Length==13))
        {
            LblDisp.Text = "Invalid Length";
        }
        else
        {
            string year = id.Substring(0, 2).ToString();
            string month = id.Substring(2, 2).ToString();
            string day = id.Substring(4, 2).ToString();
            string gender = id.Substring(6, 1).ToString();

            int yy = int.Parse(year);
            int mm = int.Parse(month);
            int dd = int.Parse(day);
            int xx = int.Parse(gender);

            if (!(yy >= 40 && yy <= 99) || (yy >=0 && yy <= 18))
            {
                LblDisp.Text = "Invalid Year";
            }
        }

标签: c#if-statement

解决方案


.Substring()如果您尝试超出其范围,将引发异常。所以如果这个词是“josh”并且你去了"josh".Substring(0,8)它会抛出一个异常,因为 josh 只有 4 个字母,而我正在尝试将子字符串转换为 8。

要修复它首先检查长度

        if (!(txtId.Text.Length==13))
        {
            LblDisp.Text = "Invalid Length";
        }
        else
        {
            string id = txtId.Text; // you do not need to even do SubString now as you know it is a length of 13
            string year = id.Substring(0, 2).ToString();
            string month = id.Substring(2, 2).ToString();
            string day = id.Substring(4, 2).ToString();
            string gender = id.Substring(6, 1).ToString();

            int yy = int.Parse(year);
            int mm = int.Parse(month);
            int dd = int.Parse(day);
            int xx = int.Parse(gender);

            if (!(yy >= 40 && yy <= 99) || (yy >=0 && yy <= 18))
            {
                LblDisp.Text = "Invalid Year";
            } 

推荐阅读