如何编写支持转换为可空类型的泛型转换方法?

The*_*ght 6 c# generics extension-methods type-conversion

可能重复:
如何解决这个问题,以便将通用转换为Nullable <T>?

public static class ObjectExtensions
    {
        public static T To<T>(this object value)
        {
            return (T)Convert.ChangeType(value, typeof(T));
        } 
    }
Run Code Online (Sandbox Code Playgroud)

我的上述扩展方法有助于将类型转换为另一种类型,但它不支持可空类型.

例如,{0}工作正常,但{1}不起作用:

{0}:
var var1 = "12";
var var1Int = var1.To<int>();

{1}:
var var2 = "12";
var var2IntNullable = var2.To<int?>();
Run Code Online (Sandbox Code Playgroud)

那么,如何编写一个通用的转换方法来支持转换为可空类型和从可空类型转换?

谢谢,

Rob*_*los 13

这对我有用:

public static T To<T>(this object value)
{
    Type t = typeof(T);

    // Get the type that was made nullable.
    Type valueType = Nullable.GetUnderlyingType(typeof(T));

    if (valueType != null)
    {
        // Nullable type.

        if (value == null)
        {
            // you may want to do something different here.
            return default(T);
        }
        else
        {
            // Convert to the value type.
            object result = Convert.ChangeType(value, valueType);

            // Cast the value type to the nullable type.
            return (T)result;
        }
    }
    else 
    {
        // Not nullable.
        return (T)Convert.ChangeType(value, typeof(T));
    }
} 
Run Code Online (Sandbox Code Playgroud)