目录
在进行c#的类型转换时:
当两个类型可以兼容:c#可以做到自动类型转化【隐形转换,如把int变量赋值给double】或者强制类型转换【显性转换,如由double赋值给int,可以用int=(int)double方法,但是会造成数据丢失】
当两个类型不能兼容:比如int和string,c#就需要用转换类型的方法来进行转换,目前据我所知系统提供的两种方法为:【Convert】和【Parse】
注:理论上任何要转到字符串类型的变量都可以用toString方法?
比较部分:
基本以涉及double类型和int类型为基础,参照
1、对于参数为null的时候:
Convert.ToDouble()参数为 null 时,返回 0.0; 类似的,其他的转换也会返回0值。
Double.Parse() 参数为 null 时,抛出异常。
细微区别的实际应用:
假如从 url 中取一个参数 page 的值,我们知道这个值是一个 int
所以即可以用 Convert.ToInt32(Request.QueryString["page"]),也可以用 int.Parse(Request.QueryString["page"])
但是如果 page 这个参数在 url 中不存在,那么前者将返回 0,0 可能是一个有效的值,所以你不知道 url 中原来根本就没有这个参数而继续进行下一下的处理,这就可能产生意想不到的效果,而用后一种办法的话没有 page 这个参数会抛出异常,我们可以捕获异常【见额外2】然后再做相应的处理,比如提示用户缺少参数,而不是把参数值当做 0 来处理。
2、对于参数为""的情况
Convert.ToDouble参数为 "" 时,抛出异常;
Double.Parse 参数为 "" 时,抛出异常。
3、四舍五入的情况下:
- a. Convert.ToInt32(double value) 如果 value 为两个整数正中间的数字,则返回二者中的偶数;即 3.5 转换为 4,4.5 转换为 4,而 5.5 转换为 6。不过 4.6 可以转换为 5,4.4 转换为 4 。
- b. int.Parse("4.5") 直接报错:"输入字符串的格式不正确"。
- c. int(4.6) = 4 Int 转化其他数值类型为 Int 时没有四舍五入,强制转换。
4、其他情况下:
convert的方法的可转换的类型往往比parse的多一点,在使用parse方法时也许出现异常,而convert则会成功转换,比如涉及到null.
换而言之,parse相比convert“更为死板”.
额外1:TryParse(a,b)方法
方法int.TryParse(string s【或者变量名】,out int i【或者是之前声明的变量名】)
Double.TryParse 与 Double.Parse 又较为类似,更为安全,但它不会产生异常,转换成功返回 true,转换失败返回 false。
前一个参数是你要转换的变量,后者参数则是转换成功后赋值给的变量。
同理,double等其他数据类型也存在这个方法
额外2:点击此处前往详细的异常处理
如果使用parse时产生了异常:
常见异常说明:
如果字符串为空,则抛出ArgumentNullException异常;
如果字符串内容不是数字,则抛出FormatException异常;
如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;
如果想要程序正常运行,而不是遇到异常直接报错/闪退/卡住……(另外除以0等算法错误也可以通过异常处理来解决)
我们可以用try/catch方法进行异常处理
try
{
// 引起异常的语句
//尝试执行的语句
}
catch( ExceptionName e1 )
{
// 错误处理代码
//Console.WriteLine("例如这里出错了给你一个提示信息");
}
这样程序可以正常的往后运行,遇到异常则会执行catch内的处理语句,而非直接报错