运维开发网

C#中判断某类型是否可以进行隐式类型转换

运维开发网 https://www.qedev.com 2020-02-09 17:08 出处:网络 作者: 网络整理
在我们采用反射动态调用一些方法时,常常涉及到类型的转换,直接判断类型是否相符有时不能判断调用方法是否合适

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;

   }

0

精彩评论

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