首页 > 编程 > C# > 正文

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

2020-01-24 03:25:32
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表