关于此方法的建议,适用于字符

本文关键字:适用于 字符 此方法 | 更新日期: 2023-09-27 18:06:49

最近我被告知要在c#应用程序中将一个数据库验证更改为一个新数据库。我将使用新的数据库而不是旧的数据库。

问题是我不能运行这个应用程序。我需要发布它,所以使用它的人给我他们的反馈。

所以我决定分享我添加的这部分代码。不是改变,而是补充。这是一种新的东西,也是一种可能出错的东西。希望有经验的人能告诉我我的代码有多烂,或者它看起来还行。

的事情是…旧数据库的列中有一个int值,新数据库的列中有一个nvarchar(5)值。

所以我做这个是为了把旧的转换成新的

string ConvertIDToReg(string kairosID)
    {
        double n;
        if (!Double.TryParse(Convert.ToString(kairosID),
                System.Globalization.NumberStyles.Any,
                System.Globalization.NumberFormatInfo.InvariantInfo, out n))
                {
                    return "0";
                }
        char[] regID = kairosID.ToCharArray();
        if (regID.Length > 4)
        {
            return "0";
        }
        if (reg.Length == 3)
        {
            regID[4] = regID[3];
            regID[3] = regID[2];
            regID[2] = regID[1];
            regID[1] = regID[0];
            regID[0] = "0";
        }
        return regID.ToString();
    }

它应该是这样工作的:

旧的ID类似于"1234",但新的ID是一个5个字符的最大ID,开头是0,如"01234"(如果第5个数字未被占用)。所以如果没有第5个数字,我想在开头放个0

如果数字超过5位,我想返回一个0作为整个字符串(这将在稍后处理)

如果数字不是数字(例如"123ABC"),仍然返回0。

这应该编译或甚至工作吗?

效率如何?这将运行几次。

关于此方法的建议,适用于字符

不,这不会编译。你拼错了你的第二个regID(忘记了'ID'),并将字符串分配给regID[0] = "0";

的字符

改变它,它将编译,然后爆炸当你运行它,当regID.Length= 3,因为你试图访问索引34,它显然没有。

这应该是你想要的:

string ConvertIDToReg(string kairosID)
{
    if (kairosID.Length > 4 || kairosID.Any(c => !char.IsDigit(c)))
         return "0";
    return kairosID.PadLeft(5, '0');
}

如果大于4个字符或者任何字符不是数字,则返回0作为字符串("0")。否则返回填充为5位的ID。我想这是我能做的最简单的事了。

这段代码应该可以工作了:

 private string ConvertIntToChar(string numValue)
        {
            int result = 0;
            if (int.TryParse(numValue, out result) == false || numValue.Length > 4)
            {
                return "0";
            }
            return numValue.PadLeft(5, '0');
        }

如果value不是4个字符,那么它将添加使字符串长度等于5所需的"0"的数量

如果字符串总是某种形式的整数,我将这样处理问题。而你想保持一切不变。"D5"告诉ToString方法对字符串进行0填充,使其始终是5位数字,但保留相同的数值。

string ConvertIDToReg(string kairosID)
    {
        int id;
        if (!Int32.TryParse(kairosID, out id) || id > 9999)
        {
            return "0";
        }
        return id.ToString("D5");
    }