Null Coalescing Operator (??) ใน C#
ตัวดำเนินการ ?? (Null-coalescing operator) ใช้สำหรับให้ค่าเริ่มต้น (default value) เมื่อค่าซ้ายเป็น null ทำงานกับ nullable value types และ reference types
หลักการทำงาน
result = leftExpression ?? rightExpression;
- ถ้า
leftExpressionไม่เป็น null → คืนค่าleftExpression - ถ้า
leftExpressionเป็น null → คืนค่าrightExpression
ตัวอย่างโค้ดสมบูรณ์
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
double? num1 = null;
double? num2 = 6.32123;
double num3;
// num1 เป็น null → ใช้ค่า 9.77
num3 = num1 ?? 9.77;
Console.WriteLine("ค่าของ num3: {0}", num3); // 9.77
// num2 ไม่เป็น null → ใช้ค่า num2
num3 = num2 ?? 9.77;
Console.WriteLine("ค่าของ num3: {0}", num3); // 6.32123
// ใช้กับ reference type
string name = null;
string displayName = name ?? "Guest";
Console.WriteLine(displayName); // Guest
Console.ReadLine();
}
}
}
ผลลัพธ์
ค่าของ num3: 9.77
ค่าของ num3: 6.32123
Guest
Null-coalescing Assignment (??=) - C# 8.0+
// กำหนดค่าเฉพาะเมื่อตัวแปรเป็น null
string name = null;
name ??= "Default Name"; // เทียบเท่า: if (name == null) name = "Default Name";
Console.WriteLine(name); // Default Name
การเชื่อมต่อหลายตัว (Chaining)
string result = first ?? second ?? third ?? "Default";
// คืนค่าแรกที่ไม่ใช่ null
ความแตกต่างจาก Ternary Operator
| คุณสมบัติ | ?? Operator | Ternary (?:) |
|---|---|---|
| ความกระชับ | สูง | ต่ำกว่า |
| ประเมินซ้ายเพียงครั้งเดียว | ✅ | ❌ (อาจประเมินซ้ำ) |
| ทำงานกับ nullable types | ✅ | ✅ |
กรณีการใช้งานทั่วไป
- ให้ค่าเริ่มต้นสำหรับการตั้งค่า (configuration)
- จัดการค่า null จาก database หรือ API
- Lazy initialization
- Fallback chain สำหรับค่าที่อาจเป็น null