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

时间:2015-08-06 21:41:37

标签: c# arrays

最近我被告知要将一个数据库的验证更改为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全部相同。

这应该编译甚至工作吗?

效率怎么样?这将运行几次。任何有助于加快速度的帮助都可以。

3 个答案:

答案 0 :(得分:1)

不,这不会编译。拼错了你的第二个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")。否则将ID填充为5位数。关于我能想到的那么简单。无需将其解析为int。

答案 1 :(得分:1)

此代码应该有效:

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

如果值不是4个字符,那么它将添加" 0"要求使字符串长度等于5。

答案 2 :(得分:0)

如果字符串总是某种形式的整数,那么我会接近这个问题。而且你想保持其他每一件事都一样。 " D5"告诉ToString方法将0填充字符串,使其始终为5位数,但保留相同的数值。

thing