แบบฝึกหัด - ตรวจสอบวิธีการ TryParse()
- 12 นาที
เมื่อทํางานกับข้อมูล บางครั้งคุณจําเป็นต้องแปลงข้อมูลสตริงเป็นชนิดข้อมูลตัวเลข ตามที่คุณได้เรียนรู้ในหน่วยก่อนหน้า เนื่องจากชนิดข้อมูลสตริงสามารถเก็บค่าที่ไม่ใช่ตัวเลขได้ อาจเป็นไปได้ว่าการดําเนินการแปลงจาก string เป็นชนิดข้อมูลตัวเลขจะทําให้เกิดข้อผิดพลาดในการรันไทม์
ตัวอย่างเช่น โค้ดต่อไปนี้:
string name = "Bob";
Console.WriteLine(int.Parse(name));
ทําให้มีข้อยกเว้นดังต่อไปนี้:
System.FormatException: 'Input string was not in a correct format.'
เพื่อหลีกเลี่ยงข้อยกเว้นของรูปแบบ ให้ใช้เมธอด TryParse() ในชนิดข้อมูลเป้าหมาย
ใช้ TryParse()
วิธี TryParse() มีหลายสิ่งพร้อมกัน:
- ซึ่งจะพยายามแยกวิเคราะห์สตริงลงในชนิดข้อมูลตัวเลขที่กําหนด
- หากสําเร็จ ระบบจะจัดเก็บค่าที่แปลงแล้วในพารามิเตอร์ ออกอธิบายไว้ในส่วนต่อไปนี้
- ซึ่งจะส่งกลับ
boolเพื่อระบุว่าการดําเนินการสําเร็จ หรือล้มเหลว
คุณสามารถใช้ค่าส่งกลับบูลีนเพื่อดําเนินการกับค่า (เช่น การดําเนินการคํานวณบางอย่าง) หรือแสดงข้อความถ้าการดําเนินการแยกวิเคราะห์ไม่สําเร็จ
โน้ต
ในแบบฝึกหัดนี้ คุณจะใช้ชนิดข้อมูล int แต่วิธี TryParse() ที่คล้ายกันจะพร้อมใช้งานกับชนิดข้อมูลตัวเลขทั้งหมด
พารามิเตอร์ Out
วิธีการสามารถส่งกลับค่าหรือส่งกลับ "void" ซึ่งหมายความว่าไม่มีค่า วิธีการยังสามารถส่งกลับค่าผ่าน out พารามิเตอร์ซึ่งถูกกําหนดเช่นเดียวกับพารามิเตอร์การป้อนข้อมูล แต่รวมคําสําคัญ out
TryParse() สตริงลงใน int
ลบหรือใช้ตัวดําเนินการข้อคิดเห็นบรรทัด
//เพื่อให้ข้อคิดเห็นเกี่ยวกับรหัสทั้งหมดจากแบบฝึกหัดก่อนหน้านี้อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }ตรวจสอบบรรทัดของโค้ดนี้:
if (int.TryParse(value, out result))เมื่อเรียกใช้วิธีการ ด้วยพารามิเตอร์
outคุณต้องใช้คําสําคัญoutก่อนตัวแปรซึ่งเก็บค่าไว้ พารามิเตอร์outจะถูกกําหนดให้กับตัวแปรresultในโค้ด(int.TryParse(value,out result)จากนั้นคุณสามารถใช้ค่าที่พารามิเตอร์outประกอบด้วย ตลอดรหัสที่เหลือของคุณโดยใช้ตัวแปรresultวิธี
int.TryParse()จะแสดงtrueหากแปลงตัวแปรstringเรียบร้อยแล้วvalueเป็นintมิฉะนั้นจะส่งกลับfalseดังนั้นล้อมรอบคําสั่งในคําสั่งifจากนั้นจึงดําเนินการตรรกะการตัดสินใจตามลําดับค่าที่แปลงแล้วจะถูกเก็บไว้ในตัวแปร
intresultตัวแปรintresultจะถูกประกาศและเตรียมใช้งานก่อนบรรทัดของโค้ดนี้ ดังนั้นจึงควรสามารถเข้าถึงได้ทั้งสอง ภายใน บล็อกโค้ดที่อยู่ในคําสั่งifและelseเช่นเดียวกับ ภายนอกคําหลัก
outแนะนําคอมไพเลอร์ว่าเมธอดTryParse()ไม่ได้ส่งกลับค่าแบบดั้งเดิมเท่านั้น (เป็นค่าที่ส่งกลับ) เท่านั้น แต่ยังสื่อสารผลลัพธ์ผ่านพารามิเตอร์แบบสองทิศทางนี้เมื่อคุณเรียกใช้โค้ด คุณควรเห็นเอาต์พุตต่อไปนี้:
Measurement: 102
ใช้ int ที่แยกวิเคราะห์ในโค้ดในภายหลัง
เพื่อแสดงให้เห็นว่าตัวแปร
resultที่ถูกประกาศก่อนหน้านี้ ถูกเติมข้อมูลโดยพารามิเตอร์outและสามารถใช้งานได้ในภายหลังในโค้ดของคุณ ให้อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");บนเมนู ไฟล์ Visual Studio Code ให้เลือก บันทึก ต้องบันทึกไฟล์ Program.cs ก่อนที่จะสร้างหรือเรียกใช้โค้ด
ในแผง EXPLORER ในการเปิดเทอร์มินัลที่ตําแหน่งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProjectจากนั้นเลือก เปิดในเทอร์มินัลแบบรวม แผงเทอร์มินัลควรเปิดขึ้น และควรมีพร้อมท์คําสั่งที่แสดงว่าเทอร์มินัลเปิดอยู่ไปยังตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ
ที่พร้อมท์คําสั่งเทอร์มินัล เมื่อต้องการเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet เรียกใช้ แล้วกด Enter
โน้ต
ถ้าคุณเห็นข้อความ "ไม่พบโครงการที่จะเรียกใช้" ตรวจสอบให้แน่ใจว่าพร้อมท์คําสั่งเทอร์มินัลแสดงตําแหน่งที่ตั้งโฟลเดอร์ TestProject ที่คาดไว้ ตัวอย่างเช่น:
C:\Users\someuser\Desktop\csharpprojects\TestProject>คุณควรเห็นผลลัพธ์ต่อไปนี้:
Measurement: 102 Measurement (w/ offset): 152ตรวจสอบบรรทัดสุดท้ายของโค้ดในตัวอย่างก่อนหน้า
Console.WriteLine($"Measurement (w/ offset): {50 + result}");เนื่องจากตัวแปรresultถูกกําหนดไว้ภายนอกคําสั่ง ถ้า สามารถเข้าถึงได้ในภายหลังในโค้ดของคุณ
ปรับเปลี่ยนตัวแปรสตริงเป็นค่าที่ไม่สามารถแยกวิเคราะห์ได้
สุดท้าย ดูที่สถานการณ์อื่น ๆ - ในกรณีที่ TryParse() ได้รับค่าที่ไม่ถูกต้องซึ่งไม่สามารถแปลงเป็น intได้
แก้ไขบรรทัดแรกของโค้ด จัดใหม่ให้ตัวแปร
valueเป็นค่าอื่นstring value = "bad";นอกจากนี้ แก้ไขบรรทัดสุดท้ายของโค้ดเพื่อให้แน่ใจว่าผลลัพธ์มีค่ามากกว่า 0 ก่อนที่จะแสดงข้อความที่สอง
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");ตัวอย่างโค้ดทั้งหมดควรตรงกับโค้ดต่อไปนี้:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");บันทึกไฟล์โค้ดของคุณ จากนั้นใช้ Visual Studio Code เพื่อเรียกใช้โค้ดของคุณ คุณควรได้รับผลลัพธ์ต่อไปนี้:
Unable to report the measurement.ตรวจสอบสองบรรทัดสุดท้ายของโค้ดที่เพิ่มในตัวอย่างก่อนหน้า
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");เนื่องจากมีการกําหนด
resultภายนอกคําสั่งifresultสามารถเข้าถึงได้ในภายหลังในรหัสของคุณภายนอกบล็อกโค้ด ดังนั้นจึงสามารถตรวจสอบresultสําหรับค่าที่มากกว่าศูนย์ก่อนที่จะอนุญาตให้สามารถเขียนค่าชดเชยresult+ เป็นเอาต์พุตได้ การตรวจสอบหาค่าresultที่มากกว่าศูนย์ จะหลีกเลี่ยงการพิมพ์ค่าออฟเซตหลังจากข้อความUnable to report the measurement.
การสรุป
วิธี TryParse() เป็นเครื่องมือที่มีประโยชน์ นี่คือแนวคิดด่วนที่ต้องจําไว้
- ใช้
TryParse()เมื่อแปลงสตริงเป็นชนิดข้อมูลตัวเลข -
TryParse()จะแสดงtrueหากการแปลงสําเร็จfalseหากไม่สําเร็จ - พารามิเตอร์ Out มีวิธีการที่สองของวิธีการที่ส่งกลับค่า ในกรณีนี้ พารามิเตอร์
outจะแสดงค่าที่แปลงแล้ว - ใช้คําหลัก
outเมื่อส่งผ่านในอาร์กิวเมนต์ไปยังวิธีการที่กําหนดพารามิเตอร์out