首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 資料型別核心差異:bool 與數值型別不可隱含轉換

     編輯:關於C語言

核心差異:C# vs C/C++

在 C/C++ 中,bool 可隱含轉換為 int (false=0, true=1),if (x) 合法。C# 嚴格禁止 bool 與其他型別隱含轉換,必須顯式比較。

錯誤範例與正確寫法


// ❌ C# 編譯錯誤 CS0029:無法將 int 隱含轉換為 bool
int x = 123;
if (x) { Console.WriteLine("非零"); }

// ✅ 正確:顯式比較
if (x != 0) { Console.WriteLine("非零"); }

// ✅ 正確:邏輯判斷回傳 bool
if (x > 0) { Console.WriteLine("正數"); }

Char 靜態方法實用範例


using System;

public class CharDemo
{
    public static void Main()
    {
        Console.Write("請輸入一個字元: ");
        char c = (char)Console.Read();  // 讀取單一字元 (含換行符需處理)
        
        if (Char.IsLetter(c))
        {
            if (Char.IsLower(c))
                Console.WriteLine("小寫字母");
            else
                Console.WriteLine("大寫字母");
        }
        else if (Char.IsDigit(c))
        {
            Console.WriteLine("數字字元");
        }
        else
        {
            Console.WriteLine("其他符號");
        }
    }
}

數值型別隱含轉換規則

byte → short, ushort, int, uint, long, ulong, float, double, decimal** (單向擴大)


// ✅ 合法隱含轉換
byte b = 100;
int i = b;        // byte → int
double d = b;     // byte → double

陷阱:運算結果預設為 int


byte x = 100, y = 200;
// ❌ 錯誤:x + y 運算結果為 int,無法隱含指派給 byte
// byte z = x + y;  

// ✅ 正確:強制轉型
byte z = (byte)(x + y);  // 結果 300 截斷為 44 (溢位行為)

型別分類總覽

分類型別大小範圍/精度
整數sbyte / byte8 bit-128~127 / 0~255
short / ushort16 bit-32,768~32,767 / 0~65,535
int / uint32 bit-2.14B~2.14B / 0~4.29B
long / ulong64 bit-9.22E18~9.22E18 / 0~1.84E19
浮點數float32 bit7 位有效數字
double64 bit15-16 位有效數字
十進位精確decimal128 bit28-29 位有效數字 (財務計算)
布林bool1 bytetrue / false (不可轉數值)
字元char16 bitUnicode UTF-16

最佳實務建議

  • 邏輯判斷**永遠使用顯式比較** (!= 0, > 0, == true)
  • 位元運算使用 byte/int 配合 &, |, ^, ~, <<, >>
  • 財務/金額計算**強制使用 decimal** 避免浮點誤差
  • 跨平台/序列化優先使用 int/long/double 標準大小
  • 啟用編譯器警告 CS0675 (位元運算於帶號整數) 提早發現問題
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved