วิธีการแปลงสตริงเป็น Nullable Int
ใน C#
ในโลกของ C# คุณอาจพบกับสถานการณ์ที่คุณต้องการแปลงการแทนค่าของตัวเลขในรูปแบบสตริงเป็นจำนวนเต็มที่สามารถรองรับค่า null
ได้ ซึ่งเป็นประโยชน์โดยเฉพาะเมื่อทำงานกับการป้อนข้อมูลจากผู้ใช้หรือข้อมูลจากแหล่งภายนอกที่อาจไม่ใช่จำนวนเต็มที่ถูกต้องเสมอไป ในโพสต์นี้ เราจะสำรวจ วิธีการแปลงสตริงเป็น nullable int
โดยมอบข้อมูลเชิงปฏิบัติและโค้ดตัวอย่างเพื่ออำนวยความสะดวกในการแปลงนี้
การทำความเข้าใจกับปัญหา
เป้าหมายคือการแปลงสตริงเป็น int?
(จำนวนเต็มที่สามารถเป็น null ได้) หากสตริงไม่สามารถแปลงเป็นจำนวนเต็มได้ เราต้องการส่งคืน null
อย่างปลอดภัยแทนที่จะเกิดข้อยกเว้นหรือเป็นจำนวนเต็มที่ไม่ถูกต้อง
ความพยายามเริ่มต้น
แนวทางแรกที่หลายคนอาจลองคือการแคสต์สตริงไปยัง int?
โดยตรงโดยใช้ตัวดำเนินการ as
ดังแสดงด้านล่าง
int? val = stringVal as int?;
อย่างไรก็ตาม วิธีนี้ไม่ทำงานอย่างมีประสิทธิภาพในการแปลงสตริง และจะส่งคืน null
หากสตริงเป็นอักขระที่ไม่ใช่ตัวเลขหรือไม่สามารถแปลงได้ ซึ่งหมายความว่าคุณต้องการวิธีที่มีความมั่นคงมากขึ้น
การสำรวจวิธีการทางเลือก
1. วิธีการขยายที่กำหนดเอง
หนึ่งในวิธีการแก้ปัญหาคือการสร้างวิธีการขยายที่กำหนดเอง วิธีนี้สามารถจัดการกรณีที่สตริงว่างหรือ null และพยายามแปลงอย่างปลอดภัย นี่คือวิธีที่มันทำงาน:
public static int? ParseNullableInt(this string value)
{
if (value == null || value.Trim() == string.Empty)
{
return null;
}
else
{
try
{
return int.Parse(value);
}
catch
{
return null;
}
}
}
คำอธิบายของโค้ด:
- วิธีการตรวจสอบว่าสตริงเป็น
null
หรือว่างเปล่า - หากว่างเปล่า จะส่งคืน
null
- หากมีค่า จะพยายามแปลงโดยใช้
int.Parse()
- หากการแปลงล้มเหลว (เนื่องจากปัญหาเกี่ยวกับรูปแบบ) จะจับข้อยกเว้นและส่งคืน
null
วิธีนี้ใช้งานได้ แต่สามารถปรับปรุงได้ในแง่ของการจัดการข้อผิดพลาด
2. การใช้ int.TryParse
แทนที่จะใช้วิธีนั้น วิธีที่มีประสิทธิภาพและเป็นฟังก์ชันในตัวมากกว่าคือการใช้ int.TryParse
วิธีนี้จะพยายามแปลงจำนวนเต็มและส่งคืนค่าบูลีนที่บอกถึงความสำเร็จหรือความล้มเหลวโดยไม่ต้องใช้ข้อยกเว้น นี่คือการปรับปรุงการทำงาน
public static int? ToNullableInt(this string s)
{
int i;
if (int.TryParse(s, out i)) return i;
return null;
}
ข้อดีของการใช้ int.TryParse
:
- ไม่ใช้ข้อยกเว้น: มันหลีกเลี่ยงการใช้บล็อก try/catch ทำให้เรียบร้อยขึ้น
- ตรวจสอบความสำเร็จแบบบูลีน: มันให้การบ่งบอกที่ชัดเจนว่าได้ทำการแปลงสำเร็จหรือไม่
- ฟังก์ชันในตัว: เนื่องจาก
int.TryParse
เป็นส่วนหนึ่งของเฟรมเวิร์ก .NET นี่เป็นวิธีมาตรฐานที่นักพัฒนาหลายคนจะรู้จัก
สรุป
โดยสรุปแล้ว การแปลงสตริงเป็นจำนวนเต็มที่สามารถเป็น null ได้ใน C# สามารถทำได้อย่างมีประสิทธิภาพโดยใช้วิธีการขยายที่กำหนดเองหรือวิธีในตัว int.TryParse
แม้ว่า วิธีการขยายจะให้การแก้ปัญหาที่แข็งแกร่ง แต่การใช้ int.TryParse
จะทำให้โครงสร้างโค้ดเรียบง่ายและเชื่อถือได้มากกว่า
เมื่อคุณพบว่าตนเองต้องการทำการแปลงแบบเดียวกันในอนาคต ให้พิจารณาใช้ int.TryParse
มันมีประสิทธิภาพ ยอมรับกันอย่างแพร่หลาย และเข้าใจง่าย โดยการนำเทคนิคเหล่านี้ไปใช้ คุณจะเพิ่มความแข็งแกร่งและความสามารถในการอ่านของโค้ดของคุณ
เราหวังว่าคู่มือนี้จะช่วยคุณในเส้นทางการเขียนโปรแกรม C# ของคุณ! อย่าลืมสำรวจหัวข้อเพิ่มเติมและแบ่งปันประสบการณ์ของคุณในการแปลงค่าใน C#