Mục lục C#

Docs / C#

Kiểu dữ liệu trong C#

Mỗi biến trong C# có một kiểu dữ liệu, nói cho máy biết biến đó giữ loại giá trị gì: số nguyên, số thực, đúng sai hay chữ. Kiểu quyết định biến chiếm bao nhiêu bộ nhớ và bạn được làm gì với nó. Nếu chưa biết biến là gì, đọc trang biến trước.

Số nguyên: int và long

int giữ số nguyên, không có phần thập phân. Đây là kiểu bạn dùng nhiều nhất: máu, vàng, số quái, level.

int hp = 100;
int enemyCount = 12;
Console.WriteLine(hp + enemyCount); // 112

int chứa được tới khoảng 2,1 tỷ. Điểm số của game idle hay tổng sát thương cả mùa giải có thể vượt con số đó. Khi ấy dùng long, thêm hậu tố L cho số lớn:

long totalDamage = 5_000_000_000L;
Console.WriteLine(totalDamage); // 5000000000

Dấu _ trong số chỉ để dễ đọc, C# bỏ qua nó.

Lỗi hay gặp: viết int totalDamage = 5000000000;. Số này vượt giới hạn int, C# báo lỗi CS0266: không đổi ngầm từ long sang int được. Đổi kiểu biến thành long.

Số thực: float, double, decimal

Số có phần thập phân có ba kiểu. Người mới hay viết float speed = 5.5; rồi gặp lỗi. Lý do: C# coi mọi số thập phân viết trơn như 5.5 là double. Muốn nó là float, thêm hậu tố f.

float moveSpeed = 5.5f;
double gravity = 9.81;
decimal price = 19.99m;

Console.WriteLine(moveSpeed); // 5.5
Console.WriteLine(gravity);   // 9.81
Console.WriteLine(price);     // 19.99

Lưu ý: máy đặt định dạng Việt Nam dùng dấu phẩy làm dấu thập phân, nên sẽ in 5,5 thay vì 5.5. Kết quả trong bài theo định dạng quốc tế.

Lỗi hay gặp: float moveSpeed = 5.5; báo lỗi CS0664: số kiểu double không gán thẳng vào float được, hãy dùng hậu tố F. Tương tự, decimal price = 19.99; cũng lỗi CS0664, cần hậu tố m.

Chọn kiểu nào:

  • float: Unity dùng float cho vị trí, tốc độ, thời gian. Làm game thì gặp nó suốt.
  • double: chính xác hơn float, là kiểu mặc định của số thực trong C# thuần.
  • decimal: dùng cho tiền thật, như giá gói nạp trong shop. Nó tính số thập phân chính xác, không bị sai lặt vặt kiểu 0.1 + 0.2.
double a = 0.1 + 0.2;
decimal b = 0.1m + 0.2m;
Console.WriteLine(a == 0.3); // False
Console.WriteLine(b == 0.3m); // True

double lưu số theo hệ nhị phân nên 0.1 + 0.2 ra 0.30000000000000004, không bằng đúng 0.3. decimal thì không bị vậy.

Đúng sai: bool

bool chỉ có hai giá trị: true hoặc false. Dùng cho mọi câu hỏi có hoặc không.

bool isAlive = true;
bool hasKey = false;
Console.WriteLine(isAlive); // True

C# in ra True với chữ T hoa, nhưng trong code bạn phải viết true thường. Xem thêm ở trang bool.

Một ký tự: char

char giữ đúng một ký tự, viết trong dấu nháy đơn.

char grade = 'S';
char moveKey = 'W';
Console.WriteLine(grade); // S

Chuỗi chữ: string

string giữ một đoạn chữ, dài bao nhiêu cũng được, viết trong dấu nháy kép.

string heroName = "Aki";
string weapon = "Kiếm gỗ";
Console.WriteLine(heroName + " cầm " + weapon); // Aki cầm Kiếm gỗ

'A' là char, "A" là string. Viết char c = "A"; sẽ báo lỗi CS0029: không đổi string sang char được. Chi tiết về chuỗi ở trang chuỗi.

Bảng tóm tắt

KiểuGiữ gìVí dụHậu tố
intSố nguyên, tới khoảng 2,1 tỷint hp = 100;
longSố nguyên rất lớnlong score = 5_000_000_000L;L
floatSố thực, độ chính xác khoảng 7 chữ sốfloat speed = 5.5f;f
doubleSố thực, khoảng 15 chữ sốdouble g = 9.81;không cần
decimalSố thập phân chính xác, cho tiềndecimal price = 19.99m;m
booltrue hoặc falsebool isAlive = true;
charMột ký tự, nháy đơnchar grade = 'S';
stringChuỗi chữ, nháy képstring name = "Aki";

Muốn đổi giá trị từ kiểu này sang kiểu khác, xem trang ép kiểu.

Bài tập

Khai báo biến cho một món đồ trong shop: tên "Bình máu lớn", giá 4.99 (tiền thật), hồi 50 máu, xếp hạng 'A', đang còn hàng. In tên và giá ra màn hình.

Xem đáp án
string itemName = "Bình máu lớn";
decimal price = 4.99m;
int healAmount = 50;
char rank = 'A';
bool inStock = true;

Console.WriteLine(itemName + ": " + price); // Bình máu lớn: 4.99