开发者

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 re开发者_如何学编程latively easy to explain, let me know if not.

Thanks in advance, Stephen.


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


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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜