您的位置:首页 > 编程语言 > C#

c#基础入门(3)——异常、三元表达式、转义符、类型转换

2016-07-27 08:42 537 查看

异常

try{}catch(Exception ex){},try-catch之间不能有任何代码;

当try-catch在循环结构中时,发生异常不会跳出循环结构;

方法A中调用了方法B,如果B中抛出了异常但是B中没有异常处理机制,就会把异常交给父方法A处理,如果A中也没有异常处理机制,那就会交给Main方法处理,直到抛出系统异常。

try
{
string strNull = null;
int a = strNull.Length;
}
int b=10;//会报错,编译根本不能通过
catch (Exception ex)
{
string msg = ex.Message;
}


循环中抛出异常时代码如下:

//for循环中抛出异常不跳出循环体
for (int i = 0; i < 6; i++)
{
try
{
string strNull = null;
int a = strNull.Length;
}
catch (Exception ex)
{
string msg = ex.Message;
}
}
//while循环中抛出异常不跳出循环体
while (true)
{
try
{
string strNull = null;
int a = strNull.Length;
}
catch (Exception ex)
{
string msg = ex.Message;
}
}


如果想知道代码是否抛出过异常,可以在catch中加一个bool类型变量来判断,代码如下:

bool flag = false;
try
{
string strNull = null;
int a = strNull.Length;
}
catch (Exception ex)
{
flag = true;
string msg = ex.Message;
}
if (flag)
{
Console.WriteLine("代码抛出了异常");
}


三元表达式

三元表达式可以用来替换if(){}else{}

if(type=="guoguo")
{  name="蝈蝈";
}
else
{  name="其他";
}
//用三元表达式写法如下
name = type=="guoguo"?"蝈蝈":"其他";
//解释:首先判断type=="guoguo"是否成立,若成立则返回":"前边的项“蝈蝈”,
//此时name="蝈蝈";否则返回":"后边的项“其他”,此时name="其他";


如果判断条件为“是否为null”的话可以进一步简化

if(test==null)
{  result="test为null";
}
else
{  result=test;
}
//三元表达式写法
result=test==null?"test为null":test;
//进一步简化
string test1 = null;
string result = test1 ?? "test1为null";
//输出result=test1为null
Console.WriteLine("result=" + result);
string test2 = "";
result = test2 ?? "test2为null";
//输出result=,输出结果不同说明""跟null是完全不同的
Console.WriteLine("result=" + result);


转义符

\转义符:

·一种特殊的字符常量;

·以反斜线”\”开头,后跟一个或几个字符。

·主要用来表示那些用一般字符不便于表示的控制代码。

·它的作用是消除紧随其后的字符的原有含义

·用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”

\'              单引号符
\"              双引号符
\\              反斜线符"\"
\0              空字符(Null)
\a              鸣铃
\b              退格
\f              走纸换页
\r              回车
\n              换行
\t              横向跳到下一制表位置
\v              竖向跳格(垂直制表)
\u              表示后面的内容是Unicode编码


char c = ‘\u4e2d’;C#和Java都输出“中”,表示4e2d是文字“中”的Unicode编码。

@转义符:

@符号可以转义多个反斜线,实例代码如下:

string particular2="c:\\g\\music\\beyond";
string particular3 = @"c:\g\music\beyond";
//输出particular=c:\g\music\beyond
Console.WriteLine("particular2=" + particular2);
//输出particular=c:\g\music\beyond
Console.WriteLine("particular3=" + particular3);


类型转换

1、类型兼容

隐式转换:

int iNum=12;
float fNum=iNum;//此处属于隐式转换,并且转换成功
float fNum=12.3f;
int iNum=fNum;//隐式转换失败


强制类型转换:

float fNum=12.3f;
int iNum=(int)fNum;//强制类型转换成功
//除此之外,里氏替换原则中把父类转换成子类也属于强制类型转换


2、类型不兼容

常用方式有三种:int.Parse、int.TryParse、Convert.ToInt,当然这只是string类型转int类型,还有string类型转double类型double.Parse、double.TryParse、Convert.ToDouble……,或者string类型转其他类型。

下面是Parse转换代码:

//要想字符串转换成int,字符串必须符合int格式
//Parse转换格式失败程序运行时会报错
int parseResult = int.Parse("12");//转换成功
parseResult = int.Parse("a12");//转换失败
//要想字符串转换成double,字符串必须符合double格式
int parseResult = int.Parse("12.3");//转换成功
parseResult = int.Parse("a12.3");//转换失败


下面是TryParse转换代码:

//TryParse转换不成功不会报错,而是返回false
int outParam;
bool flag = int.TryParse("12", out outParam);
//输出flag=True,outParam=12
Console.WriteLine("flag={0},outParam={1}", flag, outParam);
flag = int.TryParse("z16", out outParam);
//输出flag=False,outParam=0
Console.WriteLine("flag={0},outParam={1}", flag, outParam);


下面是Convert转换代码:

int result = Convert.ToInt32("123");
Console.WriteLine("result=" + result);
//转换失败会报错
result = Convert.ToInt32("123a");
Console.WriteLine("result=" + result);
//"12.3"转换为int数据要经过两次处理
int fromDouble = (int)double.Parse("12.3");
//输出fromDouble=12
Console.WriteLine("fromDouble="+fromDouble);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: