Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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# 试图理解奇怪的字符串连接行为_C#_String_Debugging_Char_Concatenation - Fatal编程技术网

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

C# 试图理解奇怪的字符串连接行为,c#,string,debugging,char,concatenation,C#,String,Debugging,Char,Concatenation,我有一个非常简单的方法,它接受一个字符串,将其分解成一个字符数组,然后从片段中创建一个新字符串。然而,它的表现出乎意料,我不明白为什么?下面是断点的图片。本例中的输入字符串为“20160622” 编辑:对不起这张照片。这是课文中的问题 internal class Program { private static void Main() { string test = "20160622"; Cons

我有一个非常简单的方法,它接受一个字符串,将其分解成一个字符数组,然后从片段中创建一个新字符串。然而,它的表现出乎意料,我不明白为什么?下面是断点的图片。本例中的输入字符串为“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是唯一没有被连接的字符

如您所见,第四个字符temp[3]是一个“6”,没有连接到输出字符串中。为什么?

编辑3:我这样解决了这个问题

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

谢谢史蒂夫的建议。

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

temp1、2、3、4对应的ascii为50、48、49、54,其和为201。(真是巧合)

然后,
int+string
concat生成string,因此字符串的其余部分按预期工作


如果是DateTime对象,则有一种更简单的方法来执行转换。您只需调用
dateTime.ToString(“yyyy-MM-dd 00:00:00”)
即可得到所需的结果。

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

temp1、2、3、4对应的ascii为50、48、49、54,其和为201。(真是巧合)

然后,
int+string
concat生成string,因此字符串的其余部分按预期工作


如果是DateTime对象,则有一种更简单的方法来执行转换。您只需调用
dateTime.ToString(“yyyy-MM-dd 00:00:00”)
就可以得到您想要的结果。

请用代码发布一篇文章,并以文本而不是屏幕截图的形式输出。不过,从根本上说,听起来你可能应该解析这个值并重新格式化它。这似乎是一种非常奇怪和糟糕的日期格式化方式。使用DateTime.TryParse和格式字符串将日期解析为DateTime对象,然后使用ToString()和格式字符串将其以您想要的方式输出。所有否决票的结果是什么。我不明白。如果不在调试器中实际尝试,我就无法解决问题。对于初学者来说,不用说。我怀疑反对票与提问方式(图像而不是代码等)有关,而不是与问题本身有关。乍一看,你只给出了一个屏幕截图,似乎不是人们回答此类问题通常需要的信息量。但是如果给出的答案是向上投票的,那么在给定输入的情况下显示的函数代码就足够了。如果您将代码作为文本包含(在代码块中)会更好,这样人们就可以自己快速试用您的代码。请发布一篇包含代码的文章,并以文本而不是屏幕截图的形式输出。不过,从根本上说,听起来你可能应该解析这个值并重新格式化它。这似乎是一种非常奇怪和糟糕的日期格式化方式。使用DateTime.TryParse和格式字符串将日期解析为DateTime对象,然后使用ToString()和格式字符串将其以您想要的方式输出。所有否决票的结果是什么。我不明白。如果不在调试器中实际尝试,我就无法解决问题。对于初学者来说,不用说。我怀疑反对票与提问方式(图像而不是代码等)有关,而不是与问题本身有关。乍一看,你只给出了一个屏幕截图,似乎不是人们回答此类问题通常需要的信息量。但是如果给出的答案是向上投票的,那么在给定输入的情况下显示的函数代码就足够了。如果您将代码作为文本(在代码块中)包含,这样人们就可以自己快速尝试您的代码,这会更好。捕捉得好,这是一个多么误导人的巧合。捕捉得好,这是多么误导人的巧合。