using System;
using System.Collections;
class aa
{
public static void Main()
{
ArrayList al = new ArrayList(20);
al.Add(5);
al.Add("%");
al.Add(5.0); int s = (double)(al[0]); //运行不过去
//int s = (int)(al[0]); //运行OK
Console.WriteLine(s);
Console.Read();
}
}它是怎么拆箱装箱, 装进去的时候是int 类型,拆出来不可以直接转化为double类型的吗?
int s = (double)(a1[0]);
不是拆箱装箱的问题,你把一个double型变量直接赋值给int 是不行的
隐式转换跟强制转换的概念你如果要换成double是这样写的
double s = (double)(a1[0]);
不错 你还知道运行不过去呢
拆箱操作则将引用类型的“还原”到栈上,拆箱首先将引用对象转换成其对应的类型(这里是Int)。也就是此时你只能将这个引用型的对象拆箱到一个和Int兼容的数据类型上,如果你想将其拆箱到其他的数据类型时将会出现类型转换的异常。
数据类型不一致
al.Add(5);
al.Add("%");
al.Add(5.0);double s = (double)(int)(al[0]);
Console.WriteLine(s);
al.Add(5);
al.Add("%");
al.Add(5.0);int s = (int)(double)(int)(al[0]);
Console.WriteLine(s);不是什么“大的进小的不可以”,他只是外表大而实质小。
double s = (double)(a1[0]);
所以,你还不如这样
int s = (int)a[0];