判斷C#中可以進行隱式類型轉換的類型

在我們採用反射動態調用一些方法時,常常涉及到類型的轉換,直接判斷類型是否相符有時不能判斷調用方法是否合適

C#中,有些類型是可以隱式轉換的,我整理了這些可以隱式轉換的類型,供大家參考

        static private bool CanConvert(Type from, Type to)        {            if (from.IsPrimitive && to.IsPrimitive)            {                TypeCode typeCodeFrom = Type.GetTypeCode(from);                TypeCode typeCodeTo = Type.GetTypeCode(to);                if (typeCodeFrom == typeCodeTo)                    return true;                if (typeCodeFrom == TypeCode.Char)                    switch (typeCodeTo)                    {                        case TypeCode.UInt16: return true;                        case TypeCode.UInt32: return true;                        case TypeCode.Int32: return true;                        case TypeCode.UInt64: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from Byte follow.                if (typeCodeFrom == TypeCode.Byte)                    switch (typeCodeTo)                    {                        case TypeCode.Char: return true;                        case TypeCode.UInt16: return true;                        case TypeCode.Int16: return true;                        case TypeCode.UInt32: return true;                        case TypeCode.Int32: return true;                        case TypeCode.UInt64: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from SByte follow.                if (typeCodeFrom == TypeCode.SByte)                    switch (typeCodeTo)                    {                        case TypeCode.Int16: return true;                        case TypeCode.Int32: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from UInt16 follow.                if (typeCodeFrom == TypeCode.UInt16)                    switch (typeCodeTo)                    {                        case TypeCode.UInt32: return true;                        case TypeCode.Int32: return true;                        case TypeCode.UInt64: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from Int16 follow.                if (typeCodeFrom == TypeCode.Int16)                    switch (typeCodeTo)                    {                        case TypeCode.Int32: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from UInt32 follow.                if (typeCodeFrom == TypeCode.UInt32)                    switch (typeCodeTo)                    {                        case TypeCode.UInt64: return true;                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from Int32 follow.                if (typeCodeFrom == TypeCode.Int32)                    switch (typeCodeTo)                    {                        case TypeCode.Int64: return true;                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from UInt64 follow.                if (typeCodeFrom == TypeCode.UInt64)                    switch (typeCodeTo)                    {                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from Int64 follow.                if (typeCodeFrom == TypeCode.Int64)                    switch (typeCodeTo)                    {                        case TypeCode.Single: return true;                        case TypeCode.Double: return true;                        default: return false;                    }                // Possible conversions from Single follow.                if (typeCodeFrom == TypeCode.Single)                    switch (typeCodeTo)                    {                        case TypeCode.Double: return true;                        default: return false;                    }            }            return false;        }

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章