从InvalidCastException键入数据

fer*_*lin 3 .net c# types

这个问题很简单:有没有什么办法让问题System.Type从S InvalidCastException?我希望能够以诸如"Expected {to-type}; found {from-type}"之类的格式显示有关失败类型转换的信息,但我找不到访问所涉及类型的方法.

编辑:我需要能够访问所涉及的类型的原因是因为我有一些时间有关于较短名称的信息.例如,RFSmallInt我想说的是类型,而不是类型smallint.而不是错误消息

Unable to cast object of type 'ReFactor.RFSmallInt' to type 'ReFactor.RFBigInt'.
Run Code Online (Sandbox Code Playgroud)

我其实想要展示

Expected bigint; recieved smallint.
Run Code Online (Sandbox Code Playgroud)

小智 7

一种解决方案可能是实现Cast函数,如果转换不成功,它会为您提供信息:

static void Main(string[] args)
{
    try
    {
        string a = Cast<string>(1);
    }
    catch (InvalidCastExceptionEx ex)
    {
        Console.WriteLine("Failed to convert from {0} to {1}.", ex.FromType, ex.ToType);
    }
}



public class InvalidCastExceptionEx : InvalidCastException
{
    public Type FromType { get; private set; }
    public Type ToType { get; private set; }

    public InvalidCastExceptionEx(Type fromType, Type toType)
    {
        FromType = fromType;
        ToType = toType;
    }
}

static ToType Cast<ToType>(object value)
{
    try
    {
        return (ToType)value;
    }
    catch (InvalidCastException)
    {
        throw new InvalidCastExceptionEx(value.GetType(), typeof(ToType));
    }
}
Run Code Online (Sandbox Code Playgroud)