复杂的变量类型

来源:互联网 发布:软件用户体验报告 编辑:程序博客网 时间:2024/06/06 09:13
前面介绍了一些简单类型变量,接着阐述另外一些类型的变量:
枚举——变量类型,用户定义了一组可能的离散值,这些值可以用人们能理解的方式使用。
结构——合成的变量类型,由用户定义的一组其他变量类型组成。
数组——包含一种类型的多个变量,可以以索引方式访问各个数值。
一、常用到的地方:
1)类型转换:
隐式转换:从类型A 到类型B 的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
1.隐式转换不需要做任何工作,也不需要另外编写代码;
2.什么情况下会隐式转换?任何类型A,只要其取值范围完全包含在类型B 的取值范围内,   就可以隐式转换为类型B
3.bool 和string 没有隐式转换,数值类型有一些隐式转换
显式转换:从类型A 到类型B 的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理。
顾名思义,在明确要求编译器把数值从一种数据类型转换为另一种数据类型(强制转换)。
eg:
byte destinationVar;
short sourceVar = 7;
destinationVar = (byte)sourceVar;
注意:1.强制转换可能会导致数据丢失。
2.其运算符的优先级与其他一元运算符一样,都是优先级中的最高级
C#里面有两个关键字checked 和unchecked,称为表达式的溢出检查上下文。
eg:
byte destinationVar;
short sourceVar = 281;
destinationVar = checked((byte)sourceVar);
编译器会检查是否溢出,如果有会报错(小编表示不怎么用这个东西)
2)使用Convert命令进行显式转焕:
Convert.ToInt32(val),Convert.ToByte(val),Convert.ToString(val)等等
注意:
1)这些命令来自于.NET Framework 的System 名称空间,而不是本机C#本身。这样它们就可以在除C#以外的其他.NET 兼容语言中使用。
2)它们总是要进行溢出检查(不需要我们操作)
拓展:
C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
1、int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型);
2、int.Parse(string sParameter)是个构造函数,参数类型只支持string类型;
3、Convert.ToInt32()适合将Object类型转换为int型;
(小编用到比较多的是int.Parse(),所以就介绍一下区别吧)
1)对于空值(null)的处理不 同,Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则 会产生异常。
2)Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6;而int(4.6) = 4,int转化其他数值类型为int时没有四舍五入,强制转换(截取整数部分);如果int.Parse(4.5) 会直接报错:"输入字符串的格式不正确"。注意int.Parse是转换String为int。
二、复杂的变量类型:
1.枚举(小编表示这个很常用):
枚举用enum 关键字定义
枚举使数值更容易辨识,从而使代码的可读性更高
1.1枚举使用一个基本类型来存储,枚举类型可以提取的每个值都存储为该基本类型的一个值,默认情况下该类型为int。当然枚举的基本类型可以是byte、sbyte、short、ushort、int、uint、long 和ulong。
1.2在默认情况下,每个值都会根据定义的顺序(从0 开始),自动赋给对应的基本类型值。这意味着<value1>的值是0,<value2>的值是1,<value3>的值是2 等。可以重写这个赋值过程:使用=运算符,并指定每个枚举的实际值:
格式:
enum <typeName> : <underlyingType>
{
<value1> = <actualVal1>,
<value2> = <actualVal2>,
<value3> = <actualVal3>,
...
<valueN> = <actualValN>
}
1.3还可以使用一个值作为另一个枚举的基础值,为多个枚举指定相同的值
<value2> = <value1>
1.4怎样把string类型转换为枚举值?
有一个特定的命令用于此类转换,Enum.Parse()
eg:
string myString = "north";
orientation myDirection = (orientation)Enum.Parse(typeof(orientation),myString);
1.4.1使用了另一个运算符typeof,可以得到操作数的类型
1.4.2并非所有的字符串值都会映射为一个orientation 值。如果传送的一个值不能映射为枚举值中的一个,就会产生错误


2.结构:
结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型。
使用struct 关键字来定义结构
结构中存储一组值


3.数组:
数组是一个变量的索引列表,存储在数组类型的变量中,在方括号中指定索引,即可访问该数组中的各个成员
数组的使用比较灵活,常用的是一维数组和二维数组,这里就介绍下注意的地方
3.1数组的初始化有两种方式。可以以字面形式指定数组的完整内容;也可以指定数组的大小,再使用关键字new 初始化所有数组元素。(new的时候,就是分配一块内存)
3.2获取数组中元素的个数使用.Length()方法
foreach循环在数组中应用的蛮多:
eg:
foreach (string friendName in friendNames)
{
Console.WriteLine(friendName);
}
这种方法和标准的for 循环的主要区别在于:foreach 循环对数组内容进行只读访问,所以不能改变任何元素的值。





原创粉丝点击