检查类型是否支持使用.NET将隐式或显式类型转换为其他类型

想象一下,您已经获得了两个System.Type,并且您想确定是否存在从一个到另一个的隐式或显式类型转换。

如果没有专门检查静态方法,是否有内置方法来确定该类型是支持这些转换还是这些转换?

我知道这是一个简短的问题,但我认为这个场景相对容易解释,如果不是,请告诉我。

斯蒂芬,提前谢谢。

Expression.Convert可以查找用户定义的转换运算符,但不幸的是,如果没有找到,它只会抛出exception。 你可以像这样使用它:

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

我不这么认为。 你将使用reflection并在每种类型上寻找那些好的’ op_Implicitop_Explicit静态方法。

这提出了一个非常有趣的问题:哪个具有更大的性能影响, reflection (这个答案)或使用控制流exception ( Quartermeister )? 我老实说无法猜到。 您可能想要对每个人进行分析并自行查找。

您可以尝试将每个转换为另一个并捕获exception

我认为Type.IsAssignableFrom应该能满足您的需求。

[编辑]请注意,这不考虑转换运算符,因此这可能对您没有用。 无论如何值得一提。