具有自定义日期格式的C#类型转换器

本文关键字:类型 类型转换 转换器 格式 自定义 日期 | 更新日期: 2023-09-27 17:58:23

这是我检查值是否可以转换为给定类型的代码。

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
        }
    }

这是应该的。现在我只需要用自定义格式(例如格式:"MM.DD.YYYY HH:MM:ss")将日期字符串转换为DateTime。我怎样才能做到这一点?

我应该单独处理DateTime场景吗?类似:

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

我想看看我是否可以在不做任何更改的情况下使用现有的代码。谢谢

具有自定义日期格式的C#类型转换器

如果将方法签名更改为与其他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
}