Copyright © 2003-2009
By Suthep Sangvirotjanaphat
  Mobile: 089-967-2200, 081-915-7816
Phone: 0-2992-4877   Fax: 0-2992-4878
Fast Contact Us

GreatFriends.Biz Community

Custom Search
 MESSAGE #61434 (อ่าน 1,304 ครั้ง)

ข้อแตกต่างระหว่าง Convert.To...(....) กับ DataType.Parse(...)

Tags: C#

ดีครับพี่ ๆ น้องๆ

               อยากทราบว่าข้อแตกต่างระหว่างการแปลงค่าทั้งสองนั้นคืออะไร เพราะให้ผลลัพธ์การทำงานที่เหมือนกัน  ทำไมถึงต้องสร้างมาสองตัว วานผู้รู้รบกวนตอบด้วยน่ะคับ ขอบคุณครับ



โรนัลโด้ วันที่ส่ง: 19 ก.ย. 50 09:31 GMT+7
วันที่ปรับล่าสุด: 20 ก.ย. 50 12:28 GMT+7
REPLY #1 (61550)
ข้อมูลไม่เป็นทางการ . . แต่ผมเคยอ่านเจอนะ ( ไม่รู้จริงไหม ) เค้าว่า Convert.to จะมี Load สูงกว่า DataType.Parse ผมเลยใช้วิธีการ DataType.Parse แทน . . มาตลอด ( เมื่อก่อนใช้ Convert.To )


Stamp วันที่ส่ง: 19 ก.ย. 50 22:37 GMT+7
วันที่ปรับล่าสุด: 19 ก.ย. 50 22:37 GMT+7
REPLY #2 (61557)

สวัสดีคับ


     ขอยกตัวอย่างการแปลงค่าระหว่าง  String -> int นะคับ
    
   Int32.Parse(str) 
           ถ้า str ไม่ใช่ค่าที่เป็นตัวเลข จะ throws FormatException
           ถ้า str เป็นค่าที่เกินขอบเขตของ int32 เช่น 55555555555555 ก็จะ throw OverflowException
           ถ้า str เป็นค่า null  จะ throws ArgumentNullException

   Convert.ToInt32(str)
           ถ้า str ไม่ใช่ค่าที่เป็นตัวเลข จะ throws FormatException
           ถ้า str เป็นค่าที่เกินขอบเขตของ int32 เช่น 55555555555555 ก็จะ throw OverflowException
           ถ้า str เป็นค่า null จะ return ค่า 0 แทนการ throws Exception

    Int32.TryParse(str, out intValue) Method นี้ถูกเพิ่มเข้ามาใน .Net 2.0 เนื่องจากว่าการจัดการกับ exception จะทำให้ระบบทำงานช้าลง TryParse นั้นจะ return เป็นชนิด boolean ถ้าสามารถแปลงค่าได้จะ return true ถ้าไม่ได้ return false ตัวอย่าง
            string str1 = "555";
            string str2 = "555.55";
            string str3 = null;
            string str4 = "55555555555555555555555555555";
 
             int intValue;
             bool isParsed;

             isParsed= Int32.TryParse(str1, out intValue); //isParsed=true  555
             isParsed= Int32.TryParse(str2, out intValue); //isParsed=false 0
             isParsed= Int32.TryParse(str3, out intValue); //isParsed=false 0
             isParsed= Int32.TryParse(str4, out intValue); //isParsed=false 0

 
เอาไปใช้งานก็ประมาณนี้  

 if(Int32.TryParse(str, out intValue)) {
      // ....
 }
else{
          // .....
 }
 
 
รายละเอียดอื่นๆ ก็เด๋วรอท่านอื่นมาเสริม ....


Del วันที่ส่ง: 20 ก.ย. 50 00:10 GMT+7
วันที่ปรับล่าสุด: 20 ก.ย. 50 00:10 GMT+7
REPLY #3 (61562)

อ๋อ คุณเดลเก่งจังเลยครับ  สงสัยอีกนิดนึงว่าทำไมต้องมี String กะ string หรือ Decimal กะ decimal ครับ

 



โรนัลโด้ วันที่ส่ง: 20 ก.ย. 50 08:19 GMT+7
วันที่ปรับล่าสุด: 20 ก.ย. 50 08:19 GMT+7
REPLY #4 (61578)

String กับ string

หรือ Decimal กับ decimal
หรือ Int32 กับ int 
เราจะเขียนอย่างใด ก็ไม่ต่างกันครับ เป็นการ alias name เฉยๆ string is an alias for System.String เพราะ .Net Framework ได้ define ไว้ที่ในส่วนของ Common Type System ตอน compile จะเห็นเป็น type เดียวกันอยู่แล้ว คือเป็น Type ตาม Namespace System น่ะครับ
 
ผมขอเพิ่มตัวอย่างของ Convert.ToString(), .ToString(), เพิ่มส่วนการ casting ละกันครับ(string) --> การ Casting ค่า
TryParse ก็ตามที่คุณ Del ได้ตอบไปแล้วนะครับ
 
string recive = Convert.ToString(xxx);
ถ้าตัวแปร xxx มีค่าจะทำการแปลงเป็น string ให้
ถ้าตัวแปร xxx เป็น null จะได้ผลลัพธ์เป็น "" (empty string)
คือยังไงก็ได้ค่าน่ะครับ
 
string receive = (string)xxx;
ถ้า xxx มีค่าเป็น string จะได้ผลลัพธ์เป็น string
ถ้า xxx เป็น null ตัวแปร receive จะเป็น null
ถ้า xxx เป็นข้อมูลที่ไม่ใช่ string เช่น ตัวเลข (เป็น int) ---> Throw Exception
การ casting ใช้เมื่อเราต้องการเช็คค่าไปในตัวด้วยน่ะครับ validate ว่าค่าที่จะนำมาแปลงเนี่ยต้องเป็น Type นั้นๆ เท่านั้น
 
string receive = xxx.ToString();
ถ้า xxx มีค่าจะได้ผลลัพธ์เป็น string
ถ้า xxx เป็น null จะ Throw Exception
เป็นการแปลงค่าไปเป็น string โดยต้องมีค่า ห้ามเป็น null
 
ผมก็นำเสนอในแบบชาวบ้านๆ นะครับ สำหรับคำตอบเชิงวิชาการคงต้องรอท่านอื่น
 
ทดลองทำ console app มาตัวนึง ทดลองเล่นดูละกันนะครับ


Pelota วันที่ส่ง: 20 ก.ย. 50 12:28 GMT+7
วันที่ปรับล่าสุด: 20 ก.ย. 50 12:28 GMT+7
กระทู้นี้มีอายุเกิน 365 วันแล้ว ท่านจะไม่สามารถตอบกระทู้นี้ได้อีก
ถ้าต้องการสนทนาต่อ กรุณาตั้งเป็นกระทู้ใหม่ได้ในหน้าโฮม
และอาจจะอ้างถึงกระทู้นี้ โดยก๊อปปี้ข้อความในกล่องสีขาวด้านล่างไปแปะในกระทู้ใหม่

copy เพื่ออ้างอิงถึงข้อความนี้:
ข้อแตกต่างระหว่าง Convert.To...(....) กับ DataType.Parse(...)
http://greatfriends.biz?61434


4 ก.ย. 00:55
Online: 232