2016-08-19 2 views
0

У меня есть очень простой метод, который берет строку, разбивает ее на массив символов, а затем создает новую строку из частей. Однако это происходит неожиданно, и я не понимаю, почему? Вот картина точки останова. Входная строка в этом случае - «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 - единственный символ, не связанный?

enter image description here

Как вы можете видеть, четвертый символ, температура [3], который является «6», не будучи объединено в выходную строку. Зачем?

Редактировать 3: я решил проблему таким образом

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

Спасибо вам Стиву за советом.

+2

Пожалуйста, напишите [mcve] с кодом и выведите как * текст *, а не как снимок экрана. По сути, похоже, похоже, что вы, вероятно, должны разбирать ценность и переформатировать ее. –

+0

Кажется, это очень странный и плохой способ отформатировать дату. Используйте DateTime.TryParse со строкой формата для анализа даты в объекте DateTime, а затем используйте ToString() со строкой формата, чтобы выводить ее так, как вы хотите. – SledgeHammer

+0

Whats со всеми поданными голосами. Я не понимаю. Я не мог понять проблему, не пытаясь попробовать ее в отладчике. Разумеется, для начинающих. – Steve

ответ

6

За ваш вопрос. Char concat не является строкой concat. Случилось так, что C# выполняет операцию Math для символов, отбрасывая их в int с помощью ASCII.

Соответствующий ASCII для температуры 1, 2, 3, 4 50, 48, 49, 54, сумма 201. (какое совпадение)

, а затем int + string CONCAT привело к строке, так что остальные строка работала должным образом.

Существует простой способ выполнить преобразование, если это был объект DateTime. Вы можете просто позвонить dateTime.ToString("yyyy-MM-dd 00:00:00"), и вы получите нужный результат.

+3

Хороший улов, и что вводит в заблуждение. – hatchet

Смежные вопросы