Nullable Types

ฐิติรัตน์ หล่อเจริญ 650710215

Nullable Types ใน C# คือชนิดข้อมูลที่สามารถเก็บค่า null ได้ ถึงจะเป็นชนิดข้อมูลแบบ value types เช่น int, double, หรือ bool ซึ่งปกติไม่สามารถมีค่า null ได้

วิธีการเข้าถึงค่าของตัวแปรแบบ Nullable

สามารถใช้เมธอด GetValueOrDefault() เพื่อรับค่า หากไม่ใช่ค่า null จะได้รับค่า แต่ถ้าเป็นค่า null ค่าเริ่มต้นสำหรับค่า null จะเป็น 0

class Geeks { 
    static void Main(string[] args)
    {
        Nullable<int> n = null;
        Console.WriteLine(n.GetValueOrDefault()); 
        int? n1 = null;
        Console.WriteLine(n1.GetValueOrDefault()); 
        int? n2 = 47;
        Console.WriteLine(n2.GetValueOrDefault()); 
        Nullable<int> n3 = 457;
        Console.WriteLine(n3.GetValueOrDefault()); 
    }
} 

ลักษณะของ Nullable Types

  • สามารถกำหนดค่าค่าว่างให้กับตัวแปรได้โดยไม่ต้องสร้าง Nullable Types

  • ใน Nullable Types สามารถกำหนดค่าให้กับประเภท nullable ได้เช่นกัน

class GFG {
    static public void Main()
    {
        int ? a = null;
        int ? b = 2345;
        Console.WriteLine(a);
        Console.WriteLine(b);
    }
}
  • สามารถใช้ Nullable.HasValue และ Nullable.Value เพื่อตรวจสอบค่า ถ้า object กำหนดค่าไว้ ก็จะส่งคืนค่า True และถ้า object กำหนดค่าเป็นค่าว่าง ก็จะส่งคืนค่า False ถ้า object ไม่ได้รับการกำหนดค่า ก็จะเกิดข้อผิดพลาดเวลาคอมไพล์

class GFG {
    static void Main()
    { 
        Nullable<int> a = null;
        Console.WriteLine(a.HasValue);
        Nullable<int> b = 7;
        Console.WriteLine(b.HasValue);
    }
}
  • สามารถใช้ == และ ! กับ Nullable Type ได้

  • ใช้method GetValueOrDefault(T) เพื่อรับค่าที่กำหนดหรือค่าที่ให้มาได้ ถ้าค่าของ Nullable Type คือ null

  • สามารถใช้ null-coalescing operator (??) เพื่อกำหนดค่าประเภทพื้นฐานซึ่งมีต้นกำเนิดมาจากค่าของ nullable type

class GFG {
    static public void Main()
    {
        int ? a = null;
        int b = a ?? 3;
        Console.WriteLine(b);
    }
  • Nullable Types ไม่สนับสนุน Nullable Types แบบซ้อนกัน

  • ไม่รองรับ var type หากใช้ Nullable กับ var คอมไพเลอร์จะเกิดข้อผิดพลาดเวลาคอมไพล์

ข้อดี

  • การใช้งานหลักของ Nullable Types คือในแอปพลิเคชันฐานข้อมูล

  • มีประโยชน์ในการแสดงค่าที่ไม่ได้กำหนด(undefined value)

  • ใช้ Nullable Types แทนเพื่อเก็บค่า null

การเปรียบเทียบกับภาษา Java/C/Python

Nullable Types ใน C# สามารถใช้เครื่องหมาย ? ตามหลังชนิดข้อมูลเพื่อระบุว่าเป็น nullable type เช่น int? หรือใช้โครงสร้าง Nullanle<>

int? num = null; 
Nullable<int> num = null;

Presentation (slides)

Clip

แหล่งอ้างอิง

Last updated