第5章介绍的是C#中的类型转换与更复杂的变量类型
一:类型转换
1:隐式类型转换
隐式转换的规则是:任何类型A,只要其取值范围完全包含在B类型的取值范围内,就可以隐式转换为类型B
根据该规则以及从第3章给定的简单数据类型的取值范围,我们可以得到以下的隐式类型转换表
类型 | 可以安全地转换为 |
byte | short, ushort, int, uint, long, ulong, float, 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 |
值得注意的是上述安全的隐式类型转换中都是只设计到了整型和浮点型数据之间的转换。
警告:bool和string都没有隐式的类型转换
关于char类型:char存储的是数值,所以char被当做一个数值类型
2:强制类型转换
转换语法:(<destinationType>)<sourceVar>
警告:强制类型转换要求是兼容的变量之间的转换,如果不兼容则将导致溢出。
可以使用关键字checked来检查在强制类型转换当中是否发生了溢出。如下面这段代码将在执行时奔溃。
static void Main(string[] args)
{
byte destinationVar;
short sourceVar = 281;
destinationVar = checked((byte)sourceVar);
Console.WriteLine("sourceVar val:{0}", sourceVar);
Console.WriteLine("destinationVar val:{0}", destinationVar);
Console.ReadKey();
}
如图:
3:使用Convert命令进行显示转换
命令 | 分别转换为 |
Convert.ToBoolean(var) | bool |
Convert.ToByte(var) | byte |
Convert.ToChar(var) | char |
Convert.ToDecimal(var) | decimal |
Convert.ToDouble(var) | double |
Convert.ToInt16(var) | short |
Convert.ToInt32(var) | int |
Convert.ToInt64(var) | long |
Convert.ToSByte(var) | sbyte |
Convert.ToSingle(var) | float |
Convert.ToString(var) | string |
Convert.ToUInt16(var) | ushort |
Convert.ToUInt32(var) | uint |
Convert.ToUInt64(var) | ulong |
二:复杂的变量类型:枚举,结构,数组
1:C#中的枚举与C/C++中的类似,直接给出用例就应该能记住:
namespace Charpter5
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
class Program
{
static void Main(string[] args)
{
orientation myDirection = orientation.north;
Console.WriteLine("myDirection = {0}", myDirection);
Console.ReadKey();
}
}
}
2:C#中的结构与C/C++中的类似,直接给出用例:
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
struct route
{
public orientation direction;
public double distance;
}
3:数组
C#中数组的声明和C/C++中的略有不同,其声明方式为:
一维数组
<baseType> [] <name>
例如:
Int[] myIntArray;
二维数组
<baseType>[,] <name>
三维数组
<baseType> [,,] <name>
多维数组以此类推
三:使用foreach循环安全地遍历数组中的元素
Foreac语法:
foreach (<bastType> <name> in <array>){
//can use <name> for each element
}
四:字符串的处理
1:string类型的变量可以看做是char变量的只读数组(注意是只读,这意味着只能读取而不能使用该方法写入),可以使用下面的方法来访问每个字符(只能访问不能更改)
<pre name="code" class="csharp">string myString = "A string";
char<span style="font-family:宋体;"> </span>myChar = myString<span style="font-family:宋体;">[0]</span>;
2:使用ToCharArray()命令从string类型中获取可写的char数组
string myString = "A string";
char[] myChars = myString.ToCharArray();
3:两个简单有效的命令:<string>.ToLower()和<string>.ToUpper()它们分别将字符串转换成小写和大写的形式。
4:<string>.Trim()命令:删除输入内容前面或后面添加了的多余的空格(注意:只能是前面和后面)
5:也可以使用Trim()命令删除其他的字符,只要在一个char数组中指定了这些字符即可,如:
char[] trimChars = { ' ', 'l', 'g', 'n' };
string userResponse = Console.ReadLine();
userResponse = userResponse.ToLower();
userResponse = userResponse.Trim(trimChars);