Imagine you\'ve been given two System.Type\'s and you want to determine if there is an implicit or explicit type conversion from one to the other.
Without specifica
Expression.Convert can look for a user-defined conversion operator, but unfortunately it will just throw an exception if none is found. You could use it like this:
public static bool CanConvert(Type fromType, Type toType)
{
try
{
// Throws an exception if there is no conversion from fromType to toType
Expression.Convert(Expression.Parameter(fromType, null), toType);
return true;
}
catch
{
return false;
}
}
You could try casting each one to the other and catching the exception
I think Type.IsAssignableFrom should give you what you need.
[edit] note that this does NOT consider conversion operators, so it's possible that this is not useful to you. Worth mentioning anyway.
I don't think so. You'll have use reflection and look for those good ol' op_Implicit
and op_Explicit
static methods on each type.
This brings up the very interesting question: which has a greater performance impact, reflection (this answer) or using exceptions for control flow (Quartermeister's)? I honestly couldn't guess. You might want to profile each and find out for yourself.