2016-07-25 11 views
1

値が所定の型に変換できるかどうかを確認するコードです。カスタム日付形式のC#型コンバータ

public static object TryParseObject<T>(object valueObject) 
    { 
     string value = null; 

     try 
     { 
      value = Convert.ToString(valueObject); 
      var converter = TypeDescriptor.GetConverter(typeof(T)); 

      if (converter != null) 
      { 
       //Cast ConvertFromString(string text) : object to (T) 
       return (T)converter.ConvertFromString(value); 
      } 
      return default(T); 
     } 
     catch 
     { 
      //Can't parse 
     } 
    } 

これは動作するはずです。これで、日付文字列をDateTimeに変換する必要があります(例:「MM.DD.YYYY HH:mm:ss」)。それをどうすれば実現できますか?

DateTimeシナリオは別途処理する必要がありますか? like:

if(typeof(T) == typeof(DateTime)) {...} 
else {...} 

私はいくつかの変更を加えて既存のコードを使用できるかどうかを見ています。ありがとう。

+0

私は別のメソッドが良くなると思いますが、この種のメソッドはすでに 'DateTime.TryParseExact'です。 – Fabio

+0

TryParseExactの参照先https://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx – kurakura88

答えて

0

あなたが他のTryParse..方法

public static bool TryParseObject<T>(object valueObject, out T outValue) 
{ 
    //your parsing code 
} 

と同じにメソッドシグネチャを変更する場合は、あなたが望むあらゆるタイプのオーバーロードを作成することができます。分離されたメソッドを使用すると、コードはきれいに分かりやすくなります。

public static bool TryParseObject(object valueObject, out DateTime outValue) 
{ 
    const string EXACT_FORMAT = "MM.DD.YYYY HH:mm:ss"; 
    // your parsing to DateTime 
} 

public static bool TryParseObject(object valueObject, out int outValue) 
{ 
    // your parsing to int 
}