1 类型转换
1.1 隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
ushort destinationVar;
char sourceVar = ‘a‘;
destinationVar = sourceVar;
Console.WirteLine("soueceVar Val:{0}",sourceVar);
Console.wirteLine("destination Val:{0}",destinationVar);
输出的结果:
sourceVar Val:a
destination Val:97
即时两个变量存储的是相同的信息,但是不同的类型解释他们时,方式也是不同的。
编译器允许隐式转换的数值转换如下表:
类型 | 可以安全的转换为 |
byte | short,ushort,int,uint,long,ulong,double,decimal |
sbyte | short,int,long,float,double,decimal |
short | int,long,float,double,decimal |
ushort | int,uint,long,ulong,float,double,decimal |
int | long,float,double,decimal |
uint | long,ulong.float,double,decimal |
long | float,double,decimal |
ulong | float,double,decimal |
float | double |
char | ushort,int,uint,long,ulong,float,double,decimal |
1.2 显式转换:从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理。
byte destinationVar;
short sourceVar = 7;
destinationVar = (byte)sourceVar;
1.2.1 使用Convert命令进行显式转换
命令 | 结果 |
Convert.ToBoolean(val) | val转换为bool |
Convert.ToByte(val) | val转换为byte |
Convert.ToChar(val) | val转换为char |
Convert.ToDecimal(val) | val转换为decimal |
Convert.ToDouble(val) | val转换为double |
Convert.ToInt16(val) | val转换为short |
Convert.ToInt32(val) | val转换为int |
Convert.ToInt64(val) | val转换为long |
Convert.ToSByte(val) | val转换为sbyte |
Convert.ToSingle(val) | val转换为float |
Convert.ToString(val) | val转换为string |
Convert.ToUInt16(val) | val转换为ushort |
Convert.ToUInt32(val) | val转换为uint |
Convert.ToUInt64(val) | val转换为ulong |
2 枚举类型
关键字enmu
enmu<typeName>
{
<value1>,
<value2>,
<value3>,
...
<valueN>
}
接着声明这个新类型
<typeName><varName>;
并赋值:
<varName>=<typeName><value>;
注:默认情况下枚举中的第一个变量赋值为1,后面的值自动加1
3 结构类型
关键字struct
struct <typeName>
{
<memberDeclarations>
}
<menberDeclarations>部分包含变量的声明(称为结构体的数据成员),其格式与往常一样。每个成员的声明都采用如下的格式:
<accessibility><type><name>;
要让调用结构的代码访问该结构的数据成员,可以对<accessibility>使用关键字public,例如:
struct route
{
public orientation direction;
public double distance;
}
定义了结构体类型之后,就可以定义新类型的变量,来使用该结构:
route myRoute;
然后通过句点字符来访问这个组合变量中数据成员:
myRoute.direction = orientation.north;
myRoute.distance = 10;
4 数组
前面的所有类型都有一个共同点:他们都只能存储一个值(结构中存储一组值)。有时,需要存储许多数据,这样就会带来不便。有时需要同时存储几个类型相同的值,而不是每一个值使用不同的变量。
4.1 声明数组:
<baseType>[]<name>;
例如:int[] myIntArray;
myIntArray[10] = 5;
或者:int[] myIntArray = new int[]arraySize;
或者:int[] myIntArray = new int[5]{1,2,3,4,5};数组大小必须和元素个数匹配
4.2 foreach循环
foreach循环可以使用一种简单的语法来定位数组中的每一个元素:
foreach(<baseType>(name) in <array>)
{
//can usr <name> for each element
}
4.3 多维数组
二维数组声明
<baseType>[,] <name>;
多维数组声明
<baseType>[,,,] <name>;
5 字符串的处理
string类型变量可以看成是char变量的只读数组。这样就可以使用下面的语法访问每一个字符:
string myString = "A string";
char myChar = myString[1];
在foreach循环中使用字符串:
foreach(char character in mystring)
{
Console.WirteLine("{0}",character);
}