อะไรคือความแตกต่างระหว่าง Parse () และ TryParse ()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
มีการตรวจสอบข้อผิดพลาดบางรูปแบบเช่น Try-Catch Block หรือไม่?
อะไรคือความแตกต่างระหว่าง Parse () และ TryParse ()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
มีการตรวจสอบข้อผิดพลาดบางรูปแบบเช่น Try-Catch Block หรือไม่?
คำตอบ:
Parse
แสดงข้อยกเว้นหากไม่สามารถแยกวิเคราะห์ค่าได้ในขณะที่TryParse
ส่งกลับการbool
ระบุว่าสำเร็จหรือไม่
TryParse
ไม่เพียงtry
/ catch
ภายใน - ประเด็นทั้งหมดคือการใช้งานโดยไม่มีข้อยกเว้นเพื่อให้เป็นไปอย่างรวดเร็ว ในความเป็นจริงวิธีที่มีแนวโน้มว่าจะนำไปใช้มากที่สุดคือParse
วิธีการภายในจะเรียกใช้TryParse
แล้วโยนข้อยกเว้นหากส่งคืนfalse
แล้วโยนยกเว้นถ้ามันกลับ
สรุปให้ใช้Parse
หากคุณแน่ใจว่าค่านั้นถูกต้อง TryParse
มิฉะนั้นใช้
หากไม่สามารถแปลงสตริงเป็นจำนวนเต็มได้
int.Parse()
จะทำให้เกิดข้อยกเว้นint.TryParse()
จะส่งคืนเท็จ (แต่ไม่โยนข้อยกเว้น)วิธีการ TryParse ช่วยให้คุณสามารถทดสอบว่ามีบางสิ่งที่แยกวิเคราะห์ได้หรือไม่ หากคุณลอง Parse เหมือนในอินสแตนซ์แรกด้วย int ที่ไม่ถูกต้องคุณจะได้รับข้อยกเว้นในขณะที่อยู่ใน TryParse จะส่งคืนบูลีนเพื่อแจ้งให้คุณทราบว่าการแยกวิเคราะห์สำเร็จหรือไม่
ในฐานะเชิงอรรถการส่งผ่านค่าว่างไปยังเมธอด TryParse ส่วนใหญ่จะทำให้เกิดข้อยกเว้น
การแยกวิเคราะห์จะแสดงข้อยกเว้นหากการแปลงจากสตริงเป็นประเภทข้อมูลที่ระบุล้มเหลวในขณะที่ TryParse หลีกเลี่ยงการโยนข้อยกเว้นอย่างชัดเจน
TryParse ไม่ส่งคืนค่าโดยจะส่งคืนรหัสสถานะเพื่อระบุว่าการแยกวิเคราะห์สำเร็จหรือไม่ (และไม่ส่งข้อยกเว้น)
สำหรับเร็กคอร์ดฉันกำลังทดสอบรหัสสองรหัสนั่นก็แค่พยายามแปลงจากสตริงเป็นตัวเลขและหากล้มเหลวให้กำหนดตัวเลขเป็นศูนย์
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
และ:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
สำหรับ c # ตัวเลือกที่ดีที่สุดคือใช้ tryparse เนื่องจากทางเลือก try & Catch ทำให้เกิดข้อยกเว้น
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
ว่ามันเจ็บปวดช้าและไม่พึงปรารถนาอย่างไรก็ตามโค้ดจะไม่หยุดจนกว่าจะมีการตัดสินข้อยกเว้นของ Debug เพื่อหยุดด้วย
ฉันรู้ว่ามันเป็นโพสต์เก่ามาก แต่คิดถึงการแบ่งปันรายละเอียดเพิ่มเติมเกี่ยวกับ Parse vs TryParse
ฉันมีสถานการณ์ที่ต้องแปลง DateTime เป็น String และถ้า datevalue null หรือ string.empty เรากำลังเผชิญกับข้อยกเว้น เพื่อเอาชนะสิ่งนี้เราได้แทนที่ Parse ด้วย TryParse และจะได้รับวันที่เริ่มต้น
รหัสเก่า:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
รหัสใหม่:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
ต้องประกาศตัวแปรอื่นและใช้เป็น Out สำหรับ TryParse
startDate
และendDate
เป็นมักจะเขียนทับพวกเขาด้วยDateTime.TryParse
DateTime.MinValue
หากการแทนค่าวันที่ไม่ถูกต้องควรถูกแปลงเป็นค่าอื่นให้ตรวจสอบค่าที่ส่งคืนของDateTime.TryParse
และถ้าเป็นเท็จให้ตั้งค่าอย่างชัดเจน
DateTime?
( DateTime nullable )
double.Parse ("-"); ทำให้เกิดข้อยกเว้นในขณะที่ double.TryParse ("-" แยกวิเคราะห์); แยกวิเคราะห์เป็น 0 ดังนั้นฉันเดาว่า TryParse ทำการแปลงที่ซับซ้อนกว่า
TryParse
กลับtrue
หรือfalse
? นั่นเป็นวิธีที่คุณจะทราบได้ว่า "ถูกต้อง" หรือไม่