2016-08-19 3 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

あなたが見ることができるように、第四のチャーは、TEMP [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

下のすべての投票で何ができますか?理解できません。デバッガで実際に試してみないと、問題を理解できませんでした。初心者のために言うまでもなく。 – Steve

答えて

6

ご質問ください。 char連結は文字列連結ではありません。何が起こったのは、C#が文字をASCIIでintにキャストすることによって、その文字に対して数学演算を行っていることです。

TEMP 1、2、3、4のための対応するASCII 50、48、49、54合計が201(何一致)

し、次いでint + string連結は、残りのように文字列を生じさ文字列は期待どおりに機能しました。

変換がDateTimeオブジェクトの場合は、変換を実行する方が簡単です。あなたは単にdateTime.ToString("yyyy-MM-dd 00:00:00")と呼ぶことができ、あなたが望む結果を得ることができます。

+3

良いキャッチは、どのような誤解を招く偶然。 – hatchet

関連する問題