TimeSpan.Zero เป็นค่าคงที่ (static readonly field) ที่แทนค่า TimeSpan ที่มีค่าเป็นศูนย์พอดี (00:00:00) ใช้สำหรับการเริ่มต้นค่า เปรียบเทียบ หรือรีเซ็ตค่า TimeSpan
รูปแบบการใช้งาน
TimeSpan ts = TimeSpan.Zero; // เทียบเท่า new TimeSpan(0)
โค้ดตัวอย่างสมบูรณ์
using System;
public class Demo
{
public static void Main()
{
// สร้าง TimeSpan.Zero
TimeSpan zero = TimeSpan.Zero;
Console.WriteLine($"TimeSpan.Zero: {zero}");
Console.WriteLine($"TotalDays: {zero.TotalDays}");
Console.WriteLine($"TotalHours: {zero.TotalHours}");
Console.WriteLine($"TotalMinutes: {zero.TotalMinutes}");
Console.WriteLine($"TotalSeconds: {zero.TotalSeconds}");
Console.WriteLine($"TotalMilliseconds: {zero.TotalMilliseconds}");
Console.WriteLine($"Ticks: {zero.Ticks}");
// การเปรียบเทียบ
Console.WriteLine("\n--- การเปรียบเทียบ ---");
TimeSpan ts1 = new TimeSpan(1, 0, 0); // 1 ชั่วโมง
TimeSpan ts2 = TimeSpan.Zero;
Console.WriteLine($"ts1 > TimeSpan.Zero: {ts1 > TimeSpan.Zero}"); // True
Console.WriteLine($"ts2 == TimeSpan.Zero: {ts2 == TimeSpan.Zero}"); // True
Console.WriteLine($"TimeSpan.Zero == TimeSpan.Zero: {TimeSpan.Zero == TimeSpan.Zero}"); // True
// การใช้งานจริง: เริ่มต้นค่าสะสม
Console.WriteLine("\n--- การสะสมเวลา ---");
TimeSpan total = TimeSpan.Zero;
TimeSpan[] intervals =
{
TimeSpan.FromHours(1),
TimeSpan.FromMinutes(30),
TimeSpan.FromSeconds(45)
};
foreach (var interval in intervals)
{
total += interval;
Console.WriteLine($"เพิ่ม {interval} → รวม: {total}");
}
// การใช้งาน: ตรวจสอบว่ามีระยะเวลาหรือไม่
Console.WriteLine("\n--- ตรวจสอบระยะเวลา ---");
TimeSpan? nullableTs = null;
TimeSpan effectiveTs = nullableTs ?? TimeSpan.Zero;
Console.WriteLine($"Nullable TimeSpan ที่เป็น null → ใช้ Zero: {effectiveTs}");
}
}
ผลลัพธ์
TimeSpan.Zero: 00:00:00
TotalDays: 0
TotalHours: 0
TotalMinutes: 0
TotalSeconds: 0
TotalMilliseconds: 0
Ticks: 0
--- การเปรียบเทียบ ---
ts1 > TimeSpan.Zero: True
ts2 == TimeSpan.Zero: True
TimeSpan.Zero == TimeSpan.Zero: True
--- การสะสมเวลา ---
เพิ่ม 01:00:00 → รวม: 01:00:00
เพิ่ม 00:30:00 → รวม: 01:30:00
เพิ่ม 00:00:45 → รวม: 01:30:45
--- ตรวจสอบระยะเวลา ---
Nullable TimeSpan ที่เป็น null → ใช้ Zero: 00:00:00
TimeSpan.Zero vs new TimeSpan(0) vs default(TimeSpan)
| วิธีสร้าง | โค้ด | ผลลัพธ์ | หมายเหตุ |
|---|---|---|---|
| Static Field | TimeSpan.Zero | 00:00:00 | อ่านง่ายที่สุด ประสิทธิภาพดี (Singleton) |
| Constructor | new TimeSpan(0) | 00:00:00 | สร้างอินสแตนซ์ใหม่ทุกครั้ง |
| Default Value | default(TimeSpan) | 00:00:00 | สำหรับ generic/struct initialization |
| FromTicks | TimeSpan.FromTicks(0) | 00:00:00 | ชัดเจนว่าเป็น 0 ticks |
การใช้งานร่วมกับ LINQ
var timeSpans = new[]
{
TimeSpan.FromHours(1),
TimeSpan.FromMinutes(30),
TimeSpan.Zero, // รวมศูนย์ได้
TimeSpan.FromSeconds(45)
};
TimeSpan sum = timeSpans.Aggregate(TimeSpan.Zero, (acc, ts) => acc + ts);
Console.WriteLine($"ผลรวม: {sum}"); // 01:30:45
// หาค่าสูงสุด (ข้าม Zero ได้ถ้าต้องการ)
TimeSpan max = timeSpans.Where(ts => ts > TimeSpan.Zero).Max();
ข้อควรระวัง
TimeSpan.Zeroเป็นreadonly- ไม่สามารถแก้ไขค่าได้- เหมาะสำหรับค่าเริ่มต้น (Default value) ของฟิลด์/พร็อพเพอร์ตี้
- ใช้ใน
??(Null-coalescing) สำหรับTimeSpan?(Nullable) - การเปรียบเทียบกับ Zero ใช้ Operator ธรรมดา (
>,<,==,!=)