隱含數值轉換 是編譯器自動執行、無需語法標示、且保證不丟失數值大小的轉換。核心原則:從較小範圍/精度的型別轉向較大範圍/精度的型別。
| 來源型別 | 目標型別 |
|---|---|
sbyte | short, int, long, float, double, decimal |
byte | short, ushort, int, uint, long, ulong, 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 |
char | ushort, int, uint, long, ulong, float, double, decimal |
float | double |
雖不丟失數量級,但下列轉換可能降低精度:
int / uint / long → floatlong → double其餘轉換完全無資訊損失。
char 的隱含轉換無任何整數型別可隱含轉為 char,必須顯式轉型:char c = (char)65;。這防止數值被誤視為字元。
using System;
class Test {
static void Main() {
byte x = 16;
ushort y = x; // 隱含 byte → ushort
y = 65535;
float z = y; // 隱含 ushort → float
Console.WriteLine($"x={x}, y={y}, z={z}");
// y = y + 1; // 編譯錯誤:int 無法隱含轉 ushort
}
}
輸出:x=16, y=65535, z=65535。若執行 y = y + 1,編譯器報錯 CS0266,因 ushort + int → int,無隱含轉回 ushort。