1、类型转换
变量之间总共有三种转换方式:显式转换/隐式转换、Convert转换和Parse转换。
- 显式转换/隐式转换适用的场合:当两个变量类型兼容时,例如int和double。
- Convert转换适用的场合:当两个变量类型不兼容时,例如string转换为int或double。
类型转换出现的地方:当表达式两边类型不一致时;
隐式转换(自动转换):当满足两个条件时会发生隐式转换(1、两种类型兼容;2、目标类型的范围大于源类型。例如int—>double)。(因为是自动转换,因此没有特别的语法要求)
显式转换(强制转换):满足(1、两种类型兼容;2、目标类型的范围小于源类型。例如将double—>int)。(需要用(int)这样的语法来强制转换)。
Convert转换:当变量类型不兼容的时候,可以使用Convert转换进行转换,例如将string转换为int或double;
string s="12.345";
double a=Convert.ToDouble(s);
注意:在用Convert进行转换的时候,转换的内容必须是能够转换得过去的,例如不能将"123.54"转换为int,因为123.54是小数,不能转换为int类型。
string s="12334";
int n=Convert.ToInt32(s); //错误
string s="123";
int n=COnvert.ToInt32(s); // 正确
Parse转换:每种基本数据类型自身有的方法,Convert转换的本质就是调用了Parse函数,所以Parse转换的效率更高点;
string s = "123";
int n = int.Parse(s);
除了Parse外还有个TryParse,TryParse相对于Parse来说最大的区别就是TryParse即使转换不了它也不会抛异常。
注意:所有类型都可以转换为string类型。
int n=10;
string s=n.toString();
//
double d=1.234;
string s=d.toString();
2、C#中控制数字输出精度方式
在占位符中利用冒号说明数字精度,例如
Console.WriteLine("{0:0.00}",a);
冒号后面的0.00来控制数字输出精度,小数点后有几个零,则输出的数字就有几个小数位;
3、异常捕获
异常:语法上没有错误,但是运行过程中会产生错误,导致程序不能正常运行。
用try----catch语句来进行异常捕获。
try
{
可能会出现异常的代码;
}
catch
{
出现异常时要执行的代码;
}
4、C#中产生随机数
1、创建能够产生随机数的对象;
Random r= new Random();
2、让随机数对象调用相应的方法产生随机数;
int n = r.Next(1,10); //1—10产生随机数范围
5、枚举
枚举可以在一定程度上规范我们的开发,尤其是团队项目。
枚举声明:
[访问权限] enum 枚举名
{
值1,
值2,
........
}
使用:
枚举名 枚举变量=枚举名.值1;
注意:枚举定义的是一个简单的变量类型,其和int、double、string等类型一样,当定义了一个枚举之后,那么这个枚举名就是一个简单的数据类型了,可以利用其去定义该枚举类型的变量,如上面枚举的使用方法,其含义和int等数据类型一样,但是其值的方式不一样。
注意:枚举类型默认可以和int类型相互转换,枚举值都是从0开始计数,每个枚举值都是基于其上一个枚举值,相差1.
6、结构
语法
[权限修饰词] struct 结构名
{
成员;
}
//--------------------------
public struct Person
{
public string _name;//注意这种命名方式
public int _age;
public char _gender;
}
7、C#数组
语法
//1#
数组类型[] 数组名=new 数组类型[数组长度];
//2#
数组类型[] 数组名={元素};
//3#
数组类型[] 数组名=new 数组类型[数组长度]{元素};
推荐前两种声明数组的方式,不推荐第三种,在使用第三种的时候,后面元素的个数一定要和数组长度一样,不能多也不能少。
8、C#方法(函数)
[访问权限] [static] 返回值类型 方法名([参数列表])
{
方法体;
}
调用:
类名.方法名([实参]);
方法中有三种高级参数:out、ref和params。
- out参数:如果方法要返回的是多个不同类型的值的时候,可以考虑用out参数。
public static bool IsLogIn(string name,string pwd,out string msg)
{
if(name=="admin"&&pwd=="123456")
{
msg="登录成功!";
return true;
}
}
调用
bool b;
string m;
b=IsLogIn("name","1234",out m);
上述方法中我想返回的有bool和string,来告诉我登录的信息。注意在方法参数列表和调用的时候均要使用关键字out,并且在调用的时候一定先声明一个变量来接受out参数。
- ref参数:当我们想要方法能够改变调用者中实参的实际值,其和C++中的引用效果差不多。
public static void Add(ref int n)
{
n+=500;
}
调用
int n=1000;
Add(ref n); //调用之后n的值是1500;
如果没有ref则调用Add不会改变n的值
- params可变参数
将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
public static int Sum(params int[] n)
{
int s=0;
for(int i=0;i<n.Length;i++)
{
s+=n[i];
}
}
调用
int sum=Sum(1,2,3,4,5);
上述会将1,2,3,4,5都当做数组n的元素来处理,可以在上面任意输入很多的整型数据
注意:params参数只能是方法参数列表中最后一个参数,并且一个方法中只能有一个params参数,在调用的时候输入的实参必须和数组类型一致。