引用類型的轉換方式有隱式轉換、強制轉換、as轉換等。值類型的轉換方式也有不少,本篇稍稍歸納。
□ 隱式轉換
int i = 10;float f = i;Console.WriteLine(f);
如果是值類型,當被轉換變量的數值范圍小於目標變量的數值范圍,就可以實現隱式轉換;如果是引用類型,子類可以隱式轉換成父類。
□ 強制轉換
float f = 10.56f;int i = (int) f;Console.WriteLine(i);
如果是值類型,當被轉換變量的數值范圍大於目標變量的數組范圍,考慮使用強制轉換;如果是引用類型,父類可以強制轉換成某個子類。值得注意的是:強制轉換可能會導致損失一些精度。
□ 通過System.Convert的靜態方法實施轉換
比如把一個整型轉換成Sysem.Char
類型。
char result = Convert.ToChar(68);Console.WriteLine(result);
通過System.Convert
轉換失敗會報OverflowException
異常。
□ 通過值類型的靜態方法
把字符串轉換成int類型。
string str = "11";int i = int.Parse(str);Console.WriteLine(i);
如果字符串中包含非數字,會拋出System.FormatException
異常。
string str = "11a";int i = int.Parse(str);Console.WriteLine(i);
如何避免這種情況呢?
--使用int.TryParse
方法可以避免這種情況。
string str = "11a";int result = 1;bool isSuccess = int.TryParse(str, out result);if (isSuccess){Console.WriteLine(result);}else{Console.WriteLine("轉換失敗");}
□ 通過IConvertible接口方法
由於所有的值類型都實現了IConvertible
接口,可以通過該接口的方法實現值類型轉換。
char result = ((IConvertible) 68).ToChar(null);Console.WriteLine(result);
如果轉換失敗,會拋出System.InvalidCastException
異常。