|
主题设置

卡片式面板通常用于非白色背景色的主体内

类型转换

C# 的类型转换分为隐式和显式转换,隐式转换自动进行而不丢失数据,显式转换需要强制转换,可能导致数据丢失。

隐式转换

隐式转换只能由低精度向高精度转换,自动进行而不丢失数据。

显示转换

简单显示转换

// 只能转换同一类的类型,如果类型之间没有联系,则不能转换
var1 = (destinationType)var2;

简单显式转换易造成数据丢失,比如 short 型的变量 281,放到 byte 型中,就会变成 25,以下方法可以检查转换时是否有丢失。

// checked() 专门可以用来检查类型转换时是否有数据丢失
// 如果在转换过程中发生溢出,将抛出 OverflowException 异常
var1 = checked((byte)var2);

// unchecked() 指定不检查类型转换时是否有数据丢失
var1 = unchecked((byte)var2);
VISUAL STUDIO 中设置项目中的类型转换,检查是否有类型丢失:在项目上右键--->属性--->生成--->高级--->勾选“检查运算上溢/下溢”

Convert 显示转换

Convert.ToBoolean(val);			// val 转换为 bool
Convert.ToByte(val);			// val 转换为 byte
Convert.ToChar(val);			// val 转换为 char
Convert.ToDecimal(val);			// val 转换为 decimal
Convert.ToDouble(val);			// val 转换为 double
Convert.ToInt16(val);			// val 转换为 short

// val 转换为 int,不完全遵守四舍五入,当 val 的第 1 位小数大于等于 5 时,如果 val 在两个整数之间的,则返回二者种的偶数
Convert.ToInt32(val);
Convert.ToInt32(4.3);			// 返回 4
Convert.ToInt32(4.5);			// 返回 4
Convert.ToInt32(5.5);			// 返回 6

Convert.ToInt64(val);			// val 转换为 long
Convert.ToSByte(val);			// val 转换为 sbyte
Convert.ToSingle(val);			// val 转换为 float
Convert.ToString(val);			// val 转换为 string
Convert.ToUInt16(val);			// val 转换为 ushort
Convert.ToUInt32(val);			// val 转换为 Uint
Convert.ToUInt64(val);			// val 转换为 Ulong

转换实例

// 此方法无法将 string 为 int,只能将数值转换为 int
var1 = (int)var2;
var1 = (decimal)var2;
var1 = (char)var2;

// 可以将 string 转为 int,但其不能转换空值(null,而不是""),会报错
var1 = int.parse(var2);
var1 = decimal.parse(var2);

// 可以将 string 转为 int,能将空值(null,而不是"")转成 0
var1 = Convert.ToInt32(var2);
var1 = Convert.ToDouble(var2);

// 所有的值类型都有一个内置的 ToString() 方法,通过这个方法,可以把所有值类型都转换为字符串类型
var1 = var2.ToString();

// 将日期格式的变量 var2,转换成 "yyyyMMdd" 格式的字符串,其中 yyyy 和 dd 必须小写,MM 必须大写,因为 MM 大写代表获取月份,小写代表获取分钟
var1 = var2.ToString("yyyyMMdd");

装箱和拆箱

隐式和显式类型转换属于不同值类型之间的转换,而如果要在值类型和引用类型之间转换,就需要了解装箱和拆箱的操作。

  • 装箱:值类型转换为 object 类型。
  • 拆箱:object 类型转换为值类型。
    int a = 0;
    Object obj = a;		// 装箱
    int b = (int)obj;	// 拆箱

转换校验

校验 string → int

int i;
// Int32.TryParse 是一个方法,用于尝试将字符串转换为 int 类型
// out i 表示如果转换成功,结果将存储在变量 i 中
// 如果成功转换,TryParse 返回 true,;如果转换失败,返回 false
if (Int32.TryParse(TextBox1.Text,out i))
{
}