โดยทั่วไปคุณควรใช้ประเภทข้อมูลเฉพาะที่สุดสำหรับข้อมูลของคุณเท่าที่จะทำได้
ตัวอย่างเช่นหากคุณใช้ Entity Framework เพื่อดึงข้อมูลจากฐานข้อมูล EF จะใช้ชนิดข้อมูลที่ใกล้เคียงที่สุดกับที่ใช้ในฐานข้อมูลโดยอัตโนมัติ
มีปัญหาสองข้อใน C #
ก่อนอื่นนักพัฒนา C # ส่วนใหญ่จะใช้int
เพื่อแสดงตัวเลขทั้งหมด (เว้นแต่มีเหตุผลที่จะใช้long
) ซึ่งหมายความว่าผู้พัฒนารายอื่นจะไม่คิดว่าจะตรวจสอบชนิดข้อมูลดังนั้นพวกเขาจะได้รับข้อผิดพลาดมากเกินที่กล่าวไว้ข้างต้น ที่สองและปัญหาที่สำคัญมากขึ้นเป็น / คือว่า .NET ของผู้ประกอบการทางคณิตศาสตร์เดิมสนับสนุนเฉพาะint
, uint
, long
, ulong
, float
, คู่และdecimal
* ยังคงเป็นกรณีนี้ในวันนี้ (ดูหัวข้อ 7.8.4 ในข้อกำหนดภาษา C # 5.0 ) คุณสามารถทดสอบได้ด้วยตัวเองโดยใช้รหัสต่อไปนี้:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
ผลลัพธ์ของเราbyte
- byte
คือint
( System.Int32
)
ปัญหาทั้งสองนี้ก่อให้เกิดการฝึก "ใช้ int สำหรับตัวเลขทั้งหมดเท่านั้น" ซึ่งเป็นเรื่องธรรมดา
ดังนั้นเพื่อตอบคำถามของคุณใน C # เป็นความคิดที่ดีint
หากไม่ปฏิบัติตาม:
- เครื่องสร้างรหัสอัตโนมัติใช้ค่าที่แตกต่าง (เช่น Entity Framework)
- นักพัฒนาอื่น ๆ ทั้งหมดในโครงการทราบว่าคุณกำลังใช้ชนิดข้อมูลที่น้อยกว่าปกติ (รวมถึงความคิดเห็นที่ชี้ให้เห็นว่าคุณใช้ประเภทข้อมูลและสาเหตุ)
- ชนิดข้อมูลที่ใช้กันทั่วไปน้อยกว่าที่ใช้กันทั่วไปในโครงการแล้ว
- โปรแกรมต้องการประโยชน์ของชนิดข้อมูลที่พบได้น้อยกว่า (คุณมี 100 ล้านของสิ่งเหล่านี้คุณต้องเก็บไว้ใน RAM ดังนั้นความแตกต่างระหว่าง a
byte
และa int
หรือint
a และ a long
เป็นสิ่งสำคัญหรือความแตกต่างทางคณิตศาสตร์
หากคุณต้องการทำคณิตศาสตร์กับข้อมูลให้ยึดติดกับประเภททั่วไป
จำไว้ว่าคุณสามารถส่งจากประเภทหนึ่งไปอีกประเภทหนึ่ง สิ่งนี้อาจมีประสิทธิภาพน้อยกว่าจากจุดยืนของ CPU ดังนั้นคุณน่าจะดีกว่าด้วยหนึ่งใน 7 ประเภททั่วไป แต่เป็นตัวเลือกถ้าจำเป็น
การแจกแจง ( enum
) เป็นหนึ่งในข้อยกเว้นส่วนตัวของฉันสำหรับแนวทางข้างต้น หากฉันมีเพียงไม่กี่ตัวเลือกฉันจะระบุ enumเป็น byte หรือ short ถ้าฉันต้องการบิตสุดท้ายใน enum ที่ถูกตั้งค่าสถานะฉันจะระบุชนิดให้เป็นuint
ดังนั้นฉันสามารถใช้ hex เพื่อตั้งค่าสำหรับการตั้งค่าสถานะ
หากคุณใช้พร็อพเพอร์ตี้ที่มีรหัสการ จำกัด ค่าควรแน่ใจว่าได้อธิบายไว้ในแท็กสรุปว่ามีข้อ จำกัด อะไรและทำไม
* ใช้ชื่อแทน C # แทนชื่อ. NET เช่นSystem.Int32
นี้เนื่องจากเป็นคำถาม C #
หมายเหตุ: มีบล็อกหรือบทความจากผู้พัฒนา. NET (ซึ่งฉันหาไม่ได้) ซึ่งชี้ให้เห็นจำนวนฟังก์ชันทางคณิตศาสตร์ที่ จำกัด และเหตุผลบางประการที่ทำให้พวกเขาไม่ต้องกังวล อย่างที่ฉันจำได้พวกเขาระบุว่าพวกเขาไม่มีแผนที่จะเพิ่มการสนับสนุนสำหรับประเภทข้อมูลอื่น
หมายเหตุ: Java ไม่รองรับชนิดข้อมูลที่ไม่ได้ลงชื่อและก่อนหน้านี้ไม่รองรับตัวเลขทั้งหมด 8 หรือ 16 บิต เนื่องจากนักพัฒนา C # หลายคนมาจากพื้นหลังของจาวาหรือจำเป็นต้องทำงานในทั้งสองภาษาข้อ จำกัด ของภาษาหนึ่งจึงถูกกำหนดไว้ในบางครั้ง