C# 试图理解奇怪的字符串连接行为
我有一个非常简单的方法,它接受一个字符串,将其分解成一个字符数组,然后从片段中创建一个新字符串。然而,它的表现出乎意料,我不明白为什么?下面是断点的图片。本例中的输入字符串为“20160622” 编辑:对不起这张照片。这是课文中的问题C# 试图理解奇怪的字符串连接行为,c#,string,debugging,char,concatenation,C#,String,Debugging,Char,Concatenation,我有一个非常简单的方法,它接受一个字符串,将其分解成一个字符数组,然后从片段中创建一个新字符串。然而,它的表现出乎意料,我不明白为什么?下面是断点的图片。本例中的输入字符串为“20160622” 编辑:对不起这张照片。这是课文中的问题 internal class Program { private static void Main() { string test = "20160622"; Cons
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()和格式字符串将其以您想要的方式输出。所有否决票的结果是什么。我不明白。如果不在调试器中实际尝试,我就无法解决问题。对于初学者来说,不用说。我怀疑反对票与提问方式(图像而不是代码等)有关,而不是与问题本身有关。乍一看,你只给出了一个屏幕截图,似乎不是人们回答此类问题通常需要的信息量。但是如果给出的答案是向上投票的,那么在给定输入的情况下显示的函数代码就足够了。如果您将代码作为文本(在代码块中)包含,这样人们就可以自己快速尝试您的代码,这会更好。捕捉得好,这是一个多么误导人的巧合。捕捉得好,这是多么误导人的巧合。