试图理解奇怪的字符串连接行为

时间:2016-08-19 17:41:13

标签: c# string debugging char concatenation

我有一个非常简单的方法,它接受一个字符串,将其分解为一个char数组,然后从这些字符串中创建一个新的字符串。然而它出乎意料地表现,我不明白为什么?这是断点的图片。在这种情况下,输入字符串是" 20160622"。

编辑:抱歉照片。以下是文字中的问题。

    internal class Program
    {
        private static void Main()
        {
            string test = "20160622";
            Console.WriteLine(ConvertDateField(test));
            Console.ReadKey();
        }

        private static string ConvertDateField(string date)
        {
            var temp = date.ToCharArray();
            var output = temp[0] + temp[1] + temp[2] + temp[3] + "-" + temp[4] + temp[5] + "-" + temp[6] + temp[7] + " 00:00:00";

            return output;
        }
    }

输出为" 201-06-22 00:00:00"。

编辑2:我知道可能有更好的方法来做到这一点。我想要了解的是为什么这个代码按照它的方式运行。即。为什么6是唯一没有连接的char?

enter image description here

正如您所看到的,第四个char,temp [3]是' 6',没有被连接到输出字符串中。为什么呢?

编辑3:我用这种方式解决了问题

    private static string ConvertDateField(string date)
    {
        return DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd 00:00:00");
    }

谢谢史蒂夫的建议。

1 个答案:

答案 0 :(得分:6)

对于你的问题。 char concat不是字符串concat。发生的事情是c#通过使用ASCII将它们转换为int来对字符进行数学运算。

临时1,2,3,4的相应ascii是50,48,49,54,其总和是201.(多么巧合)

然后int + string concat导致字符串,所以字符串的其余部分按预期工作。

如果它是DateTime对象,有一种更简单的方法来执行转换。您只需拨打dateTime.ToString("yyyy-MM-dd 00:00:00")即可获得所需的结果。