Possible Duplicate:
How can I fix this up to do generic conversion to Nullable<T>?
public static class ObjectExtensions
{
public static T To<T>(this object value)
{
return (T)Convert.ChangeType(value, typeof(T));
}
}
My above extension method helps converting a type to another type but it doesn't support nullable types.
For example, {0} works fine but {1} doesn't work:
{0}:
var var1 = "12";
var var1Int = var1.To<int>();
{1}:
var var2 = "12";
var var2IntNullable = var2.To<int?>();
So, how to write a generic conversion method which would support converting to and from nullable types?
Thanks,
This means that you can put any object in a collection because all classes in the C# programming language extend from the object base class. Also, we cannot simply return null from a generic method like in normal method.
The Explicit operator, which defines the available narrowing conversions between types. For more information, see the Explicit Conversion with the Explicit Operator section. The IConvertible interface, which defines conversions to each of the base . NET data types.
ChangeType(Object, TypeCode) is a general-purpose conversion method that converts the object specified by value to a predefined type specified by typeCode . The value parameter can be an object of any type.
This works for me:
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));
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With