C# 型別轉換

chrisrmas、發表於2024-10-29

C# 型別轉換

在 C# 中,型別轉換是將一個資料型別的值轉換為另一個資料型別的過程。

C# 中的型別轉換可以分為兩種:隱式型別轉換顯式型別轉換(也稱為強制型別轉換)。

隱式型別轉換

隱式轉換是不需要編寫程式碼來指定的轉換,編譯器會自動進行。

隱式轉換是指將一個較小範圍的資料型別轉換為較大範圍的資料型別時,編譯器會自動完成型別轉換,這些轉換是 C# 預設的以安全方式進行的轉換, 不會導致資料丟失。

例如,從 int 到 long,從 float 到 double 等。

從小的整數型別轉換為大的整數型別,從派生類轉換為基類。將一個 byte 型別的變數賦值給 int 型別的變數,編譯器會自動將 byte 型別轉換為 int 型別,不需要顯示轉換。

例項

byte b = 10;
int i = b; // 隱式轉換,不需要顯式轉換

將一個整數賦值給一個長整數,或者將一個浮點數賦值給一個雙精度浮點數,這種轉換不會導致資料丟失:

例項

int intValue = 42;
long longValue = intValue; // 隱式轉換,從 int 到 long

顯式轉換

顯式型別轉換,即強制型別轉換,需要程式設計師在程式碼中明確指定。

顯式轉換是指將一個較大範圍的資料型別轉換為較小範圍的資料型別時,或者將一個物件型別轉換為另一個物件型別時,需要使用強制型別轉換符號進行顯示轉換,強制轉換會造成資料丟失。

例如,將一個 int 型別的變數賦值給 byte 型別的變數,需要顯示轉換。

例項

int i = 10;
byte b = (byte)i; // 顯式轉換,需要使用強制型別轉換符號

強制轉換為整數型別:

例項

double doubleValue = 3.14;
int intValue = (int)doubleValue; // 強制從 double 到 int,資料可能損失小數部分

強制轉換為浮點數型別:

例項

int intValue = 42;
float floatValue = (float)intValue; // 強制從 int 到 float,資料可能損失精度

強制轉換為字串型別:

例項

int intValue = 123;
string stringValue = intValue.ToString(); // 將 int 轉換為字串

下面的例項顯示了一個顯式的型別轉換:

例項

using System;

namespace TypeConversionApplication
{
class ExplicitConversion
{
static void Main(string[] args)
{
double d = 5673.74;
int i;

// 強制轉換 double 為 int
i = (int)d;
Console.WriteLine(i);
Console.ReadKey();

}
}
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

5673

C# 型別轉換方法

C# 提供了下列內建的型別轉換方法:

序號方法 & 描述
1 ToBoolean
如果可能的話,把型別轉換為布林型。
2 ToByte
把型別轉換為位元組型別。
3 ToChar
如果可能的話,把型別轉換為單個 Unicode 字元型別。
4 ToDateTime
把型別(整數或字串型別)轉換為 日期-時間 結構。
5 ToDecimal
把浮點型或整數型別轉換為十進位制型別。
6 ToDouble
把型別轉換為雙精度浮點型。
7 ToInt16
把型別轉換為 16 位整數型別。
8 ToInt32
把型別轉換為 32 位整數型別。
9 ToInt64
把型別轉換為 64 位整數型別。
10 ToSbyte
把型別轉換為有符號位元組型別。
11 ToSingle
把型別轉換為小浮點數型別。
12 ToString
把型別轉換為字串型別。
13 ToType
把型別轉換為指定型別。
14 ToUInt16
把型別轉換為 16 位無符號整數型別。
15 ToUInt32
把型別轉換為 32 位無符號整數型別。
16 ToUInt64
把型別轉換為 64 位無符號整數型別。

這些方法都定義在 System.Convert 類中,使用時需要包含 System 名稱空間。它們提供了一種安全的方式來執行型別轉換,因為它們可以處理 null值,並且會丟擲異常,如果轉換不可能進行。

例如,使用 Convert.ToInt32 方法將字串轉換為整數:

string str = "123";
int number = Convert.ToInt32(str); // 轉換成功,number為123

如果字串不是有效的整數表示,Convert.ToInt32 將丟擲 FormatException。

下面的例項把不同值的型別轉換為字串型別:

例項

using System;

namespace TypeConversionApplication
{
class StringConversion
{
static void Main(string[] args)
{
// 定義一個整型變數
int i = 75;

// 定義一個浮點型變數
float f = 53.005f;

// 定義一個雙精度浮點型變數
double d = 2345.7652;

// 定義一個布林型變數
bool b = true;

// 將整型變數轉換為字串並輸出
Console.WriteLine(i.ToString());

// 將浮點型變數轉換為字串並輸出
Console.WriteLine(f.ToString());

// 將雙精度浮點型變數轉換為字串並輸出
Console.WriteLine(d.ToString());

// 將布林型變數轉換為字串並輸出
Console.WriteLine(b.ToString());

// 等待使用者按鍵後關閉控制檯視窗
Console.ReadKey();
}
}
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

75
53.005
2345.7652
True

在進行型別轉換時需要注意以下幾點:

  • 隱式轉換隻能將較小範圍的資料型別轉換為較大範圍的資料型別,不能將較大範圍的資料型別轉換為較小範圍的資料型別;
  • 顯式轉換可能會導致資料丟失或精度降低,需要進行資料型別的相容性檢查;
  • 對於物件型別的轉換,需要進行型別轉換的相容性檢查和型別轉換的安全性檢查。

型別轉換方法

C# 提供了多種型別轉換方法,例如使用 Convert 類、Parse 方法和 TryParse 方法,這些方法可以幫助處理不同的資料型別之間的轉換。

使用 Convert 類

Convert 類提供了一組靜態方法,可以在各種基本資料型別之間進行轉換。

例項

string str = "123";
int num = Convert.ToInt32(str);

使用 Parse 方法

Parse 方法用於將字串轉換為對應的數值型別,如果轉換失敗會丟擲異常。

例項

string str = "123.45";
double d = double.Parse(str);

使用 TryParse 方法

TryParse 方法類似於 Parse,但它不會丟擲異常,而是返回一個布林值指示轉換是否成功。

例項

string str = "123.45";
double d;
bool success = double.TryParse(str, out d);

if (success) {
Console.WriteLine("轉換成功: " + d);
} else {
Console.WriteLine("轉換失敗");
}

自定義型別轉換

C# 還允許你定義自定義型別轉換操作,透過在型別中定義 implicit 或 explicit 關鍵字。

例項

using System;

public class Fahrenheit
{
public double Degrees { get; set; }

public Fahrenheit(double degrees)
{
Degrees = degrees;
}

// 隱式轉換從Fahrenheit到double
public static implicit operator double(Fahrenheit f)
{
return f.Degrees;
}

// 顯式轉換從double到Fahrenheit
public static explicit operator Fahrenheit(double d)
{
return new Fahrenheit(d);
}
}

public class Program
{
public static void Main()
{
Fahrenheit f = new Fahrenheit(98.6);
Console.WriteLine("Fahrenheit object: " + f.Degrees + " degrees");

double temp = f; // 隱式轉換
Console.WriteLine("After implicit conversion to double: " + temp + " degrees");

Fahrenheit newF = (Fahrenheit)temp; // 顯式轉換
Console.WriteLine("After explicit conversion back to Fahrenheit: " + newF.Degrees + " degrees");
}
}

以上例子中,我們定義了一個 Fahrenheit 類,並實現了從 Fahrenheit 到 double 的隱式轉換和從 double 到 Fahrenheit 的顯式轉換。

輸出結果將顯示如下:

Fahrenheit object: 98.6 degrees
After implicit conversion to double: 98.6 degrees
After explicit conversion back to Fahrenheit: 98.6 degrees

總結

在 C# 中,內建的型別轉換方法主要透過以下幾種方式實現:隱式轉換、顯式轉換(強制轉換)、使用 Convert 類的方法、Parse 方法和 TryParse 方法,這些方法廣泛應用於不同資料型別之間的轉換。

以下是 C# 內建型別轉換方法的表格:

方法類別方法描述
隱式轉換 自動進行的轉換 無需顯式指定,通常用於安全的型別轉換,如從較小型別到較大型別
顯式轉換(強制轉換) (type)value 需要顯式指定,通常用於可能導致資料丟失或轉換失敗的情況
Convert 類方法 Convert.ToBoolean(value) 將指定型別轉換為 Boolean
Convert.ToByte(value) 將指定型別轉換為 Byte
Convert.ToChar(value) 將指定型別轉換為 Char
Convert.ToDateTime(value) 將指定型別轉換為 DateTime
Convert.ToDecimal(value) 將指定型別轉換為 Decimal
Convert.ToDouble(value) 將指定型別轉換為 Double
Convert.ToInt16(value) 將指定型別轉換為 Int16(短整型)
Convert.ToInt32(value) 將指定型別轉換為 Int32(整型)
Convert.ToInt64(value) 將指定型別轉換為 Int64(長整型)
Convert.ToSByte(value) 將指定型別轉換為 SByte
Convert.ToSingle(value) 將指定型別轉換為 Single(單精度浮點型)
Convert.ToString(value) 將指定型別轉換為 String
Convert.ToUInt16(value) 將指定型別轉換為 UInt16(無符號短整型)
Convert.ToUInt32(value) 將指定型別轉換為 UInt32(無符號整型)
Convert.ToUInt64(value) 將指定型別轉換為 UInt64(無符號長整型)
Parse 方法 Boolean.Parse(string) 將字串解析為 Boolean
Byte.Parse(string) 將字串解析為 Byte
Char.Parse(string) 將字串解析為 Char
DateTime.Parse(string) 將字串解析為 DateTime
Decimal.Parse(string) 將字串解析為 Decimal
Double.Parse(string) 將字串解析為 Double
Int16.Parse(string) 將字串解析為 Int16
Int32.Parse(string) 將字串解析為 Int32
Int64.Parse(string) 將字串解析為 Int64
SByte.Parse(string) 將字串解析為 SByte
Single.Parse(string) 將字串解析為 Single
UInt16.Parse(string) 將字串解析為 UInt16
UInt32.Parse(string) 將字串解析為 UInt32
UInt64.Parse(string) 將字串解析為 UInt64
TryParse 方法 Boolean.TryParse(string, out bool) 嘗試將字串解析為 Boolean,返回布林值表示是否成功
Byte.TryParse(string, out byte) 嘗試將字串解析為 Byte,返回布林值表示是否成功
Char.TryParse(string, out char) 嘗試將字串解析為 Char,返回布林值表示是否成功
DateTime.TryParse(string, out DateTime) 嘗試將字串解析為 DateTime,返回布林值表示是否成功
Decimal.TryParse(string, out decimal) 嘗試將字串解析為 Decimal,返回布林值表示是否成功
Double.TryParse(string, out double) 嘗試將字串解析為 Double,返回布林值表示是否成功
Int16.TryParse(string, out short) 嘗試將字串解析為 Int16,返回布林值表示是否成功
Int32.TryParse(string, out int) 嘗試將字串解析為 Int32,返回布林值表示是否成功
Int64.TryParse(string, out long) 嘗試將字串解析為 Int64,返回布林值表示是否成功
SByte.TryParse(string, out sbyte) 嘗試將字串解析為 SByte,返回布林值表示是否成功
Single.TryParse(string, out float) 嘗試將字串解析為 Single,返回布林值表示是否成功
UInt16.TryParse(string, out ushort) 嘗試將字串解析為 UInt16,返回布林值表示是否成功
UInt32.TryParse(string, out uint) 嘗試將字串解析為 UInt32,返回布林值表示是否成功
UInt64.TryParse(string, out ulong) 嘗試將字串解析為 UInt64,返回布林值表示是否成功

相關文章