代码之家  ›  专栏  ›  技术社区  ›  meandmycode

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

  •  8
  • meandmycode  · 技术社区  · 15 年前

    想象一下你得到了两个系统类型,您要确定是否存在从一个到另一个的隐式或显式类型转换。

    在没有特别检查静态方法的情况下,是否有一个内置方法来确定类型是否支持这些转换?

    我知道这是一个简短的问题,但我认为情况是相对容易解释,让我知道如果不是。

    斯蒂芬。

    4 回复  |  直到 15 年前
        1
  •  8
  •   Quartermeister    15 年前

    Expression.Convert 可以查找用户定义的转换运算符,但不幸的是,如果找不到任何转换运算符,它只会抛出一个异常。你可以这样使用它:

    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;
        }
    }
    
        2
  •  8
  •   Community Mohan Dere    9 年前

    我不这么认为。你得用反射来寻找那些好的ol' op_Implicit op_Explicit 每个类型的静态方法。

    反射 (这个答案)或使用 控制流异常 ( Quartermeister's )? 我真的猜不到。你可能需要对每个人进行分析,然后自己找出答案。

        3
  •  0
  •   hackerhasid    15 年前

    你可以试着把每一个都转换成另一个,然后捕捉异常

        4
  •  0
  •   tenfour    15 年前

    我想 Type.IsAssignableFrom 应该给你你需要的。