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

ตัวดำเนินการรวมค่าเมื่อเป็น Null

ใช้ ?? และ ??= เพื่อจัดเตรียมค่าทดแทน

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

ตัวดำเนินการรวมค่าว่าง ??

ตัวดำเนินการรวมค่าว่าง ?? จะคืนค่าตัวถูกดำเนินการด้านซ้ายหากไม่ใช่ค่าว่าง มิฉะนั้นจะคืนค่าตัวถูกดำเนินการด้านขวา นี่คือค่าสำรองแบบกระชับ

using System;

class Program {
    static void Main() {
        int? maybe = null;
        int value = maybe ?? -1;
        Console.WriteLine(value);
    }
}

?? เลือกค่าแรกที่ไม่ใช่ค่าว่าง

หากด้านซ้ายมีค่า ค่านั้นจะถูกเลือก และด้านขวาจะถูกข้ามไป

using System;

class Program {
    static void Main() {
        int? a = 7;
        Console.WriteLine(a ?? 0);
    }
}

?? กับชนิดอ้างอิง

?? ใช้กับชนิดอ้างอิงอย่าง string ได้เช่นกัน เพื่อมอบข้อความเริ่มต้นเมื่อเป็นค่าว่าง

using System;

class Program {
    static void Main() {
        string name = null;
        Console.WriteLine(name ?? "Guest");
    }
}

การเชื่อม ??

คุณสามารถเชื่อมค่าสำรองหลายค่าเข้าด้วยกันได้ โดยจะใช้ค่าแรกที่ไม่ใช่ค่าว่าง

using System;

class Program {
    static void Main() {
        string a = null, c = "third";
        string b = null;
        Console.WriteLine(a ?? b ?? c ?? "last");
    }
}

?? คืนค่าชนิดพื้นฐาน

เมื่อด้านซ้ายเป็น int? และด้านขวาเป็น int ผลลัพธ์จะเป็น int ปกติ เนื่องจากไม่สามารถเป็นค่าว่างได้อีกต่อไป

using System;

class Program {
    static void Main() {
        int? maybe = null;
        int sure = maybe ?? 0;
        Console.WriteLine(sure + 5);
    }
}

ตัวดำเนินการ ??=

การกำหนดค่าแบบรวมค่าว่าง ??= จะกำหนดค่าด้านขวา เฉพาะเมื่อ ด้านซ้ายเป็นค่าว่างอยู่ในขณะนั้น

using System;

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

??= คงค่าเดิมไว้

หากตัวแปรมีค่าอยู่แล้ว ??= จะไม่ทำอะไร

using System;

class Program {
    static void Main() {
        string config = "custom";
        config ??= "default";
        Console.WriteLine(config);
    }
}

การกำหนดค่าเริ่มต้นแบบประเมินเมื่อจำเป็นด้วย ??=

??= เหมาะอย่างยิ่งสำหรับกำหนดค่าในครั้งแรกและคงค่านั้นไว้หลังจากนั้น

using System;

class Program {
    static string cache = null;
    static string GetData() {
        cache ??= "loaded";
        return cache;
    }
    static void Main() {
        Console.WriteLine(GetData());
        Console.WriteLine(GetData());
    }
}

?? เทียบกับ GetValueOrDefault

ทั้งสองอย่างจัดเตรียมค่าใช้แทน แต่ ?? ยืดหยุ่นกว่า เพราะใช้กับชนิดอ้างอิงได้ และให้ค่าใช้แทนเป็นนิพจน์ใดก็ได้

using System;

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

?? ในอาร์กิวเมนต์ของเมธอด

ใช้ ?? แทรกในตำแหน่งที่ต้องการ เพื่อจัดเตรียมค่าเริ่มต้นตรงจุดที่ต้องใช้ค่า

using System;

class Program {
    static void Greet(string name) {
        Console.WriteLine("Hello, " + name);
    }
    static void Main() {
        string input = null;
        Greet(input ?? "friend");
    }
}

พฤติกรรมการประเมินแบบลัดวงจร

ด้านขวาของ ?? จะถูกประเมินเฉพาะเมื่อด้านซ้ายเป็นค่าว่าง คล้ายกับการประเมินแบบลัดวงจร

using System;

class Program {
    static int Compute() {
        Console.WriteLine("Computed");
        return 42;
    }
    static void Main() {
        int? known = 1;
        int result = known ?? Compute();
        Console.WriteLine(result);
    }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับตัวดำเนินการรวมค่าว่าง

สรุปทบทวน

ตัวดำเนินการ ?? คืนค่าด้านซ้ายหากไม่ใช่ค่าว่าง มิฉะนั้นจะคืนค่าด้านขวา และสามารถเชื่อมต่อหลายตัวเข้าด้วยกันได้ ชนิดของผลลัพธ์จะไม่เป็นชนิดที่เป็นค่าว่างได้อีกเมื่อมีค่าใช้แทนที่ไม่เป็นค่าว่าง

??= จะกำหนดค่าเฉพาะเมื่อเป้าหมายเป็นค่าว่าง จึงเหมาะสำหรับค่าเริ่มต้นและการกำหนดค่าเริ่มต้นแบบประเมินเมื่อจำเป็น ทั้งสองตัวจะประเมินด้านขวาเฉพาะเมื่อจำเป็น

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

บทเรียน “ตัวดำเนินการรวมค่าเมื่อเป็น Null” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ตัวดำเนินการรวมค่าเมื่อเป็น Null”

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

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

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

บทเรียน “ตัวดำเนินการรวมค่าเมื่อเป็น Null” ใช้เวลานานแค่ไหน

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

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

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

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

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