meandmycode
meandmycode

Reputation: 17317

Checking if a type supports an implicit or explicit type conversion to another type with .NET

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 specifically checking for the static methods is there a built in method to determine that the type supports either or these conversions?

I know this is a brief body to a question but I think the scenario is relatively easy to explain, let me know if not.

Thanks in advance, Stephen.

Upvotes: 8

Views: 2854

Answers (4)

Dan Tao
Dan Tao

Reputation: 128447

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.

Upvotes: 8

tenfour
tenfour

Reputation: 36906

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.

Upvotes: 0

Quartermeister
Quartermeister

Reputation: 59179

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

Upvotes: 8

asbestossupply
asbestossupply

Reputation: 11929

You could try casting each one to the other and catching the exception

Upvotes: 0

Related Questions