s运算符is运算符检查对象类型,在安全类型转换之前进行判断之用。
例如,要检查变量是否与object类型兼容: 注意:“兼容”表示对象是该类型,或者派生于该类型。
object o = "hahaha"; if(o is object) { string s = (string)o; Console.WriteLine(s); Console.ReadLine(); }as运算符用于执行引用类型的显式类型转换。
如果要转换的类型与指定的类型兼容,转换就会成功进行;
如果类型不兼容,as运算符就会返回值null。
如下面的代码所示:
object o = "hahaha"; object o2 = 1; string s = o as string; string s2 = o2 as string; Console.WriteLine(s); Console.WriteLine(s2); Console.ReadLine(); as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类 型,再转换。可以让int和string相互转换
string→int
int i = 100;string s = i.ToString(); 转换成string类型
int i = Convert.ToInt32("100");或者是int i = Int32.Parse("100");
或者是
int i;
bool succeed = Int32.TryParse("100",out i);
Console.WriteLine(i);//默认值为0
装箱就是值类型转成引用类型。
为了把值类型转化为引用类型来进行统一操作管理。
如下实例:
[html] view plain copy int i = 3;//值类型的值 object oi = null;//引用类型对象 oi = i;//将值类型的值赋给对象
(装箱是需要消耗内存的,所以能不装箱就不要装箱。) 装箱的本质是什么?
装箱的本质就是在堆上创建了引用类型的副本,新创建的引用类型和原来的值类型相互独立。(并不是真正的装箱,原来的数据都在,只是在堆中创建了引用类型的副本)
拆箱就是装箱的逆操作,就是把引用类型转变成值类型。
[html] view plain copy int i = 3; object oi = i; int j = (int)oi;
Nullable的作用是为了定义一个可以为null的整数值
int? i = null;//定义一个可以为空的int类型的值
System.Nullable<int> j = 1;//等同于上句 int i2 = i ?? 100; //如果i值不为null,则i2的值为i,否则,i2的值为100 Console.WriteLine(i.HasValue);//空时为false,不空为true Console.WriteLine(i.GetValueOrDefault());//空时为0,不空时是值 Console.WriteLine(i2); Console.ReadLine();
