C# Academy · บทเรียน

ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)

C# 6 ยังไม่มีชนิดอ้างอิงที่เป็นค่าว่างได้ (string?) เรียนรู้การจัดการค่า null อย่างปลอดภัยด้วยการตรวจข้อมูลเข้า เอกสารที่ชัดเจน ตัวช่วย Require.NotNull และเปรียบเทียบกับ Nullable สำหรับชนิดค่า

บทเรียน 3 จาก 38 ขั้นตอน

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

ความเข้าใจ NRT และทางเลือกสำรอง

แนวคิด: ชนิดการอ้างอิงที่เป็นค่าว่างได้ (เช่น string?) จะเพิ่มการตรวจสอบโดยคอมไพเลอร์ใน C# รุ่นใหม่

  • C# 6 ไม่รองรับ string?
  • ใช้ การตรวจสอบ เอกสารที่ชัดเจน และ ตัวช่วยที่เรียบง่าย
  • ส่งคืนค่าที่ไม่เป็นค่าว่างเป็นค่าเริ่มต้น

ตรวจสอบค่าค่าว่าง

เพิ่มการตรวจสอบด้วย ArgumentNullException สำหรับพารามิเตอร์ชนิดอ้างอิง จากนั้นจึงถือว่าค่าเหล่านั้นไม่เป็นค่าว่าง

using System;

public static class Greeter
{
  // Contract: name must not be null (C# 6 has no string? to enforce)
  public static string Hello(string name)
  {
    if (name == null) throw new ArgumentNullException("name"); // guard
    return "Hello " + name.ToUpper(); // safe after guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Greeter.Hello("Ada"));
    try
    {
      Console.WriteLine(Greeter.Hello(null)); // will throw (by design)
    }
    catch (Exception ex)
    {
      Console.WriteLine("Caught: " + ex.GetType().Name);
    }
  }
}

ตัวช่วย Require.NotNull

สร้างตัวช่วยขนาดเล็กชื่อ Require.NotNull เพื่อลดโค้ดซ้ำซ้อนและทำให้เจตนาชัดเจน

using System;

public static class Require
{
  // Works for reference types; returns the validated value
  public static T NotNull<T>(T value, string name) where T : class
  {
    if (value == null) throw new ArgumentNullException(name);
    return value;
  }
}

public sealed class Email
{
  public string Address { get; private set; }

  public Email(string address)
  {
    Address = Require.NotNull(address, "address").Trim();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Email e = new Email("user@mail.com");
    Console.WriteLine(e.Address);
  }
}

Nullable&lt;T&gt; กับชนิดอ้างอิง

Nullable<T> (เช่น int?) ใช้สำหรับ ชนิดค่า ชนิดอ้างอิงสามารถเป็นค่าว่างได้อยู่แล้ว เราจึงใช้การตรวจสอบใน C# 6

using System;

public class Program
{
  public static void Main(string[] args)
  {
    int x = 5;              // value type (non-nullable)
    int? maybe = null;      // Nullable<T> works for value types
    Console.WriteLine("x=" + x);
    Console.WriteLine("maybe has value? " + maybe.HasValue);
    Console.WriteLine("maybe or default: " + (maybe ?? -1));
  }
}

ระบุข้อตกลงเรื่องค่าว่างในเอกสาร

ระบุความสามารถในการเป็นค่าว่างไว้ใน เอกสาร XML และใช้แนวทางให้สอดคล้องกัน: ให้ไม่เป็นค่าว่างเสมอ หรือระบุให้ชัดเจนเมื่ออาจเป็นค่าว่าง

using System;

/// <summary>
/// Parses "key=value" and returns the value part.
/// Returns null if the format is invalid.
/// </summary>
public static class Parser
{
  // Explicitly document when null can be returned.
  public static string TryGetValue(string line)
  {
    if (line == null) throw new ArgumentNullException("line");
    int idx = line.IndexOf("=");
    if (idx < 0 || idx == line.Length - 1) return null; // documented nullable return
    return line.Substring(idx + 1);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Parser.TryGetValue("a=1"));
    Console.WriteLine(Parser.TryGetValue("oops")); // prints nothing (null)
  }
}

รายการตรวจสอบความปลอดภัยจากค่าว่าง (C# 6)

รายการตรวจสอบ:

  • ตรวจสอบอินพุตด้วย ArgumentNullException
  • ส่งคืนค่าที่ไม่เป็นค่าว่างเป็นค่าเริ่มต้น และระบุในเอกสารเมื่อผลลัพธ์อาจเป็นค่าว่าง
  • ใช้ตัวช่วยขนาดเล็ก (Require.NotNull) เพื่อให้โค้ดเป็นระเบียบ
  • เมื่อเหมาะสม ให้เลือกโอเวอร์โหลดที่หลีกเลี่ยงค่าว่าง (เช่น ใช้สตริงว่างแทนค่าว่าง)

ความปลอดภัยจากค่าว่างใน C# 6

ตรวจสอบอย่างรวดเร็ว: ใน C# 6 ซึ่งไม่มีชนิดการอ้างอิงที่เป็นค่าว่างได้ แนวปฏิบัติที่ดีในการลดข้อผิดพลาดเกี่ยวกับค่าว่างใน API สาธารณะคืออะไร

ทบทวน

ทบทวน: NRT เป็นความสามารถที่เพิ่มเข้ามาในรุ่นใหม่กว่า ใน C# 6 ให้ใช้การตรวจสอบ เอกสารที่ชัดเจน เมธอดตัวช่วย และข้อตกลงผลลัพธ์ที่ไม่เป็นค่าว่างอย่างสม่ำเสมอเพื่อความปลอดภัย

เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

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

บทเรียน “ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)”

C# 6 ยังไม่มีชนิดอ้างอิงที่เป็นค่าว่างได้ (string?) เรียนรู้การจัดการค่า null อย่างปลอดภัยด้วยการตรวจข้อมูลเข้า เอกสารที่ชัดเจน ตัวช่วย Require.NotNull และเปรียบเทียบกับ Nullable สำหรับชนิดค่า คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด
  2. ความแปรผัน (in/out) กับอินเทอร์เฟซและผู้รับมอบหมาย
  3. ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)
← กลับไปที่ C# Academy