第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);