2016-07-25 74 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场景吗?如:

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

我正在寻找,看看我是否可以使用现有的代码,几乎没有变化。谢谢。

+0

我觉得单独的方法会更好,但这种方法已经存在'DateTime.TryParseExact'。 – Fabio

+0

TryParseExact的参考https://msdn.microsoft.com/zh-cn/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 
}