Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于此方法的建议,该方法适用于chars_C#_Arrays - Fatal编程技术网

C# 关于此方法的建议,该方法适用于chars

C# 关于此方法的建议,该方法适用于chars,c#,arrays,C#,Arrays,最近,我被告知在C#应用程序中将一个数据库验证更改为一个新数据库。我将使用新数据库,而不是旧数据库 问题是我无法运行该应用程序。我需要发布它,让使用它的人给我反馈 所以我决定分享我添加的这部分代码。 没有改变,但是增加了。这是一种新事物,也是一种可能出错的潜在事物。 希望有更多经验的人会告诉我我的代码有多糟糕,或者它看起来是否正常 事情是。。。旧数据库的列中有一个int值,新数据库的列中有一个nvarchar(5) 所以我做这个是为了把旧的换成新的 string ConvertIDToReg(s

最近,我被告知在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();
    }
这就是它的工作原理:

 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');
        }
旧ID类似于“1234”,但新ID是一个最多5个字符的ID,开头有一个0,类似于“01234”(如果第5个数字没有被占用)。所以基本上,如果没有第五个数字,我希望能在开头加上一个0

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

如果数字不是数字(即“123ABC”),则返回0

这应该编译还是工作


效率呢?这将运行几次。任何加快此速度的帮助都可以。

不,这不会编译。您拼错了第二个
regID
(忘记了'ID'),并在
regID[0]=“0”处为字符分配了一个字符串

更改它,它将编译,然后在运行它时爆炸,当
regID.Length=3
时,因为您试图访问索引
3
4
,而它显然没有索引

这应该满足您的需求:

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

    return kairosID.PadLeft(5, '0');
}

如果长度超过4个字符或任何字符不是数字,请将零作为字符串返回(
“0”
)。否则返回填充为5位的ID。我想这是我能做到的最简单的事情了。甚至不需要将其解析为int。

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

string ConvertIDToReg(string kairosID)
    {
        int id;
        if (!Int32.TryParse(kairosID, out id) || id > 9999)
        {
            return "0";
        }
        return id.ToString("D5");
    }
此代码应适用于:

 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个字符,那么它将添加使字符串长度等于5所需的数字“0”。

这是否可以编译,甚至可以工作?
我不确定,您应该能够告诉我们您是否成功。如果合适,您想将数字转换为正好5位的字符串,如果不合适,则转换为“0”?就这样<代码>字符串sID=oldID>=100000?“0”:旧ID.ToString(“00000”)在int值转换为字符串之前,不应该应用执行此操作的逻辑吗?如果(!Int32.TryParse(kairosID,out id))| | id.ToString().Length>4)不应该是
?如果解析id的长度大于4,OP希望返回“0”。我的建议是测试解析id的长度(首先转换为字符串),以防在
kairosID
参数中插入空格。例如,它可以以'098'开头,这是7个字符,但解析的int的长度将是3个字符。