c# - Convert.ChangeType()が日付文字列(dd / MM / yyyy形式)を日時タイプに変換しないのはなぜですか?

原文 c# datetime visual-studio-2013 devexpress type-conversion

以下は、リフレクションを介してエンティティデータを入力するコードです。

public static void SetEntityProperty(object entity, DevExpress.Web.ASPxFormLayout formLayoutControl)
{
    if (formLayoutControl != null)
    {
       Type type = entity.GetType();
       System.Reflection.PropertyInfo[] properties = type.GetProperties();
       System.Data.DataTable dt = new System.Data.DataTable();
       foreach (System.Reflection.PropertyInfo pi in properties)
       {
          var layoutItem = formLayoutControl.FindItemByFieldName(pi.Name);
          if (layoutItem != null && layoutItem.CssClass == "ro-item") continue;

          var control = formLayoutControl.FindNestedControlByFieldName(pi.Name);
          if (control != null && control is DevExpress.Web.ASPxEdit)
          {
              var targetType = Data.IsNullableType(pi.PropertyType) ? Nullable.GetUnderlyingType(pi.PropertyType) : pi.PropertyType;
              try
              {
                 if ((control as DevExpress.Web.ASPxEdit).Value != null)
                 {
                    //here (control as DevExpress.Web.ASPxEdit).Value = "19/05/2015" and control is a read only text box
                    var value = Convert.ChangeType((control as DevExpress.Web.ASPxEdit).Value, targetType);
                    if (value != null && value is System.String)
                    {
                        value = value.ToString().Trim();
                        (control as DevExpress.Web.ASPxEdit).Value = value;
                    }
                    pi.SetValue(entity, value, null);
                 }
                 else
                 {
                    pi.SetValue(entity, null, null);
                 }
              }
              catch (Exception ex)
              {
                 pi.SetValue(entity, value, null);
              }
         }
         else
              throw ex;
       }
    }
}


ここで何が悪いのですか? Convert.ChangeTypeに関連する他の質問はほとんど見つかりませんでしたが、提案はすべてこのコードに既に実装されています。 Visual Studio 2013 C#、DevExpress 14.2.6を使用しています。助けてください。ありがとう。
答え
これを試して:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;

namespace DateTimeConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            var text1 = "19/05/2015"; //dd/mm/yyyy format
            var text2 = "05/19/2015"; //mm/dd/yyyy format
            var result = DateTime.Now;

            DateTime.TryParse(text1, out result);
            Console.WriteLine(result);

            DateTime.TryParse(text2, out result);
            Console.WriteLine(result);

            //Depending on computer's current culture format this will cause an error due to dd/MM/yyyy CULTURE format
            //DateTime date = (DateTime)Convert.ChangeType(text1, typeof(DateTime));

            var date = DateTime.ParseExact(text1, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            Console.WriteLine(date);

            Console.ReadLine();
        }
    }
}


「dd / MM / yyyy」の日付時刻形式を変換しているのです。これは、コンピューターのカルチャーフォーマットによって異なります。 DateTime.ParseExactを使用して正しい形式を指示するには、CultureInfo.InvariantCultureを使用できます。
関連記事

c# - 辞書からnull可能値を削除し、型を再キャストする

c# - C++からC#への複雑な構造体のマーシャリング

c# - C#:テキストファイルへの変数の挿入

c# - エンティティフレームワークで作成されたデータベースからヘルパーのドロップダウンリストにアイテムをロードする

c# - Web APIのリクエストに一致する複数のアクションが見つかりました

c# - 日付ピッカーのドロップダウンリストから日付を無効にする

c# - TFSがビルドのgit reposを複製しているときのAppDomainUnloadedException

c# - SQL例外をスローするASP.Netフォーム

c# - 負の角度でも正の値を返すPIDコントローラー

c# - ルールアセンブリを読み込めません