0Pricing
C# Academy · บทเรียน

คุณสมบัติ HasValue และ Value

ตรวจสอบและเข้าถึงค่า Nullable อย่างปลอดภัย

คุณสมบัติ HasValue และ Value เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณสมบัติสำคัญสองประการ

ค่าที่รองรับค่าว่างทุกค่าจะมี HasValue (ชนิด bool) และ Value (ค่าพื้นฐาน) ทั้งสองอย่างนี้เป็นเครื่องมือสำหรับตรวจสอบค่าอย่างปลอดภัย

using System;

class Program {
    static void Main() {
        int? n = 5;
        Console.WriteLine(n.HasValue);
        Console.WriteLine(n.Value);
    }
}

HasValue ตรวจสอบการมีค่า

HasValue เป็น true เมื่อมีค่าจริงอยู่ และเป็น false เมื่อเป็นค่าว่าง

using System;

class Program {
    static void Main() {
        int? a = 10;
        int? b = null;
        Console.WriteLine(a.HasValue);
        Console.WriteLine(b.HasValue);
    }
}

การอ่าน Value อย่างปลอดภัย

ตรวจสอบ HasValue ก่อนอ่าน Value เสมอ เพราะการอ่าน Value ขณะที่เป็นค่าว่างจะทำให้เกิดข้อยกเว้น

using System;

class Program {
    static void Main() {
        int? n = 42;
        if (n.HasValue) {
            Console.WriteLine(n.Value * 2);
        }
    }
}

การเข้าถึง Value ขณะเป็นค่าว่างทำให้เกิดข้อยกเว้น

หากคุณอ่าน Value ขณะที่ค่าที่รองรับค่าว่างเป็นค่าว่าง C# จะทำให้เกิด InvalidOperationException การตรวจสอบจะช่วยป้องกันปัญหานี้

using System;

class Program {
    static void Main() {
        int? n = null;
        try {
            Console.WriteLine(n.Value);
        } catch (InvalidOperationException) {
            Console.WriteLine("Caught: no value");
        }
    }
}

GetValueOrDefault

GetValueOrDefault() จะคืนค่าที่มีอยู่ หากไม่มีค่าจะคืนค่าเริ่มต้นของชนิดนั้น (0 สำหรับ int และเท็จสำหรับ bool)

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault());
    }
}

GetValueOrDefault พร้อมค่าสำรอง

ส่งอาร์กิวเมนต์เพื่อเลือกค่าสำรองของคุณเอง: GetValueOrDefault(99) จะคืนค่า 99 เมื่อเป็นค่าว่าง

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault(99));
        int? m = 7;
        Console.WriteLine(m.GetValueOrDefault(99));
    }
}

รูปแบบ: ตรวจสอบก่อนแล้วจึงใช้

รูปแบบที่ใช้กันทั่วไปคือการรวม HasValue และ Value เข้ากับแขนงการทำงานที่กระชับและชัดเจน

using System;

class Program {
    static void Describe(int? score) {
        if (score.HasValue)
            Console.WriteLine("Score is " + score.Value);
        else
            Console.WriteLine("No score yet");
    }
    static void Main() {
        Describe(88);
        Describe(null);
    }
}

การแปลงกลับโดยนัย

คุณสามารถกำหนดค่าที่รองรับค่าว่างให้ชนิดค่าธรรมดาได้หลังจากยืนยันแล้วว่ามีค่า จากนั้นจึงอ่าน Value

using System;

class Program {
    static void Main() {
        int? maybe = 15;
        if (maybe.HasValue) {
            int real = maybe.Value;
            Console.WriteLine(real + 5);
        }
    }
}

ค่าเริ่มต้นของชนิดที่รองรับค่าว่าง

ค่าที่รองรับค่าว่างซึ่งไม่ได้กำหนดค่าไว้อย่างชัดเจนจะมีค่าเริ่มต้นเป็นค่าว่าง ดังนั้น HasValue จึงเป็น false

using System;

class Program {
    static void Main() {
        int? n = default;
        Console.WriteLine(n.HasValue);
    }
}

การใช้งานในการรวมค่า

วนซ้ำข้อมูล โดยข้ามค่าที่เป็นค่าว่างด้วย HasValue เพื่อคำนวณผลรวมอย่างปลอดภัย

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5, null, 8 };
        int sum = 0;
        foreach (var r in readings)
            if (r.HasValue) sum += r.Value;
        Console.WriteLine(sum);
    }
}

GetValueOrDefault ในลูป

GetValueOrDefault ช่วยทำให้โค้ดกระชับขึ้นในกรณีที่ควรถือว่าค่าว่างมีค่าเป็นศูนย์

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5 };
        int sum = 0;
        foreach (var r in readings)
            sum += r.GetValueOrDefault();
        Console.WriteLine(sum);
    }
}

ตรวจสอบความเข้าใจ

ทดสอบความรู้ของคุณเกี่ยวกับคุณสมบัติของชนิดที่รองรับค่าว่าง

สรุปทบทวน

HasValue บอกว่าค่าที่รองรับค่าว่างมีค่าหรือไม่ และ Value ใช้ดึงค่านั้นออกมา แต่การอ่าน Value ขณะที่เป็นค่าว่างจะทำให้เกิดข้อยกเว้น

GetValueOrDefault() จะคืนค่าหรือค่าสำรองอย่างปลอดภัย โดยใช้ค่าเริ่มต้นของชนิดนั้นหรือค่าที่คุณระบุ จึงเหมาะสำหรับการหาผลรวมและการอ่านค่าอย่างปลอดภัย

คำถามที่พบบ่อย

บทเรียน “คุณสมบัติ HasValue และ Value” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คุณสมบัติ HasValue และ Value” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คุณสมบัติ HasValue และ Value”

ตรวจสอบและเข้าถึงค่า Nullable อย่างปลอดภัย คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คุณสมบัติ HasValue และ Value” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนะนำชนิดค่าที่เป็น Nullable
  2. คุณสมบัติ HasValue และ Value
  3. ตัวดำเนินการรวมค่าเมื่อเป็น Null
  4. Nullable ในการคำนวณ
← กลับไปที่ C# Academy