前言
对显式隐式转换的学习,以及try 、as、Convert.ToInt32()和int.Parse()的区别的学习
一、隐式转换
namespace Djf_C_xuexi_Project
{
class Program
{
static void Main(string[] args)
{
//隐式转换(一般是大范围装小范围)
int i = 10;
long l = i;
//隐式转换(子类->基类)也称为向上转型,无法使用子类特有的方法
C1 c1 = new C2();
c1.nihao();
c1.nihao2();//报错!!!
//和正常子类的区别
C2 c2 = new C2();
c2.nihao();
c2.nihao2();
}
class C1 {
public void nihao() {
Console.WriteLine("111");
}
}
class C2 : C1 {
public void nihao2()
{
Console.WriteLine("222");
}
}
}
}
一般是大范围装小范围,自动转换。
二、显式转换
代码如下(示例):
namespace Djf_C_xuexi_Project
{
class Program
{
static void Main(string[] args)
{
double a = 10.05;
double b = 10.035;
string c = "35";
string d = "35.06";
//浮点型->整形
int i = (int)a;
Console.WriteLine(i);//i=10
//浮点型->字符串型
Console.WriteLine(a.ToString());//a=10.05
//浮点型->字符串型(保留两位小数)
Console.WriteLine(b.ToString("f2"));//b=10.03
//string c=35;
Console.WriteLine(Convert.ToInt32(c));//c=35
Console.WriteLine(int.Parse(c));//c=35
//double b=10.035 string d="33.25"
Console.WriteLine(Convert.ToInt32(b));//b=10
Console.WriteLine(int.Parse(d));//报错 输入字符串的格式不正确
Console.WriteLine(Int32.Parse(c));//c=35
Console.ReadLine();
int num = 0;
bool f = int.TryParse("123", out num);
//如果字符串可转换成int类型的参数,则返回true,输出num;否则,返回false,num为0
}
}
}
C#之Convert.ToInt32()和int.Parse()的区别
1、Convert.ToInt32()是将继承于object类的对象转换成int;
int.Parse()只能将String类的对象转换成int,即括号中的数据类型只能是String类型
2、对NULL值得处理:Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常
3、当括号中得数据类型为double型时:
(1)Convert.ToInt32(double value),如果value为3.5,转换后为4;value为4.5,转换后还是4;value为5.5,转换后为6。也就是说,当value为double型时,返回相邻两个整数中为偶数的那一个。
(2)在int.Parse(value) 中,如果value为double型,直接报错:“输入字符串的格式不正确”.
4、Parse就是把参数类型为String的转换成int,char,double…等,即*.Parse(string value),value一定要是string 类型的,否则会报错!!!
Convert可以提供多种类型的转换,即Convert.*(value) 中对value类型没有限制。
补充:
int.TryParse(string s,out param)是一个实现参数转换的方法,其返回值为bool类型。
示例:
int number = 0;
bool b = int.TryParse( “123”, out number );
//如果字符串可转换成int类型的参数,则返回true,输出number;否则,返回false,number为0
此处原文链接为:https://blog.csdn.net/Kevin_Sun777/article/details/109584433
三、异常处理try、as
代码如下(示例):
namespace Djf_C_xuexi_Project
{
class Program
{
class C1 { }//基类
class C2 : C1 { }//派生类
static void Main(string[] args)
{
C1 c1 = new C1();
C2 c2 = (C2)c1;//报错(无法将类型为“C1”的对象强制转换为类型“C2”)
Console.WriteLine(c2);
Console.ReadLine();
//处理异常的方式
try
{
//可能出现异常的语句
C2 c22 = (C2)c1;
}
catch (Exception e)
{
Console.WriteLine( e.Message);
//报错(无法将类型为“C1”的对象强制转换为类型“C2”)
}
//as把c1转换成C2这个类型 如果出错 就将C22置为null
C2 c23 = c1 as C2;
Console.WriteLine(c23==null);//输出true
Console.ReadLine();
//as 的使用更为高效相对于try而言,其只适用于引用类型和非空类型
}
}
}