Giới thiệu
Toán tử default trả về giá trị mặc định của bất kỳ kiểu nào: value type (0, false, ...) hoặc reference type (null). Từ C# 7.1, có thể dùng default literal (type inference).
Cú pháp
// Cũ int val1 = default(int); long val2 = default(long); bool val3 = default(bool); // Mới (C# 7.1+) int val1 = default; long val2 = default; bool val3 = default;
Ví dụ hoàn chỉnh
using System;
public class Demo
{
public static void Main()
{
int val1 = default(int);
long val2 = default(long);
bool val3 = default(bool);
Console.WriteLine(val1); // 0
Console.WriteLine(val2); // 0
Console.WriteLine(val3); // False
}
}
Kết quả
0 0 False
Ứng dụng trong Generic
public class Repository{ public T GetDefault() => default; // T có thể là value hoặc reference type } public T FindOrDefault(int id) { var item = _db.Find(id); return item ?? default; // Trả về default(T) nếu không tìm thấy }
default vs new T()
| Biểu thức | Value Type | Reference Type |
|---|---|---|
default(T) | Zero-initialized (nhanh, không gọi constructor) | null |
new T() | Gọi constructor không tham số | Gọi constructor, cấp phát heap |
Lưu ý
defaultliteral chỉ dùng nơi compiler suy ra được kiểu (assignment, return, argument, ...).- Không dùng được:
var x = default;(không suy ra kiểu). - Trong
switchexpression:case null: return default;.