ใน C # ตัวอย่างอาร์เรย์มีคุณสมบัติความยาว แต่คอลเล็กชันประเภทอื่น ๆ เช่นรายการ ฯลฯ มีคุณสมบัติ Count มีเหตุผลทำไมทั้งสองนี้แตกต่างกันอย่างไร ถ้าฉันอยากรู้
ใน C # ตัวอย่างอาร์เรย์มีคุณสมบัติความยาว แต่คอลเล็กชันประเภทอื่น ๆ เช่นรายการ ฯลฯ มีคุณสมบัติ Count มีเหตุผลทำไมทั้งสองนี้แตกต่างกันอย่างไร ถ้าฉันอยากรู้
คำตอบ:
พวกเขามีชื่อแตกต่างกันเพราะความหมายพวกเขาค่อนข้างแตกต่างกัน:
จำนวนของคอลเลกชันคือจำนวนรายการที่จัดเก็บอยู่ในปัจจุบันและสามารถเปลี่ยนแปลงได้ตลอดเวลา
ความยาวของอาร์เรย์คือจำนวนไอเท็มสูงสุดที่สามารถเก็บได้ (จะมีความยาว 10 แม้ว่าคุณจะไม่ได้เก็บไอเท็มนั้นไว้ในนั้น) และเปลี่ยนรูปไม่ได้
ตัวอย่าง:
ถ้าฉันมีถังที่สามารถบรรจุลูกบอลได้สูงสุด 100 ลูกมันจะมีความยาว 100 ถ้าฉันใส่ 50 ลูกเข้าไปก็จะมีจำนวน 50
ถ้าฉันเพิ่มอีก 10 ลูกการนับกลายเป็น 60 แต่ความยาวยังคงเป็น 100 ในการเปลี่ยนความยาวฉันต้องได้ถังที่แตกต่างกัน
อาเรย์อาจใช้คำว่า Length เพราะภายใต้ประทุนนั้นมันจะทำการจัดสรรบล็อกที่ต่อเนื่องกัน (ความยาว) ของหน่วยความจำโดยพิจารณาจากความสามารถคูณด้วยขนาดของรายการ แม้ว่าความจริงที่ว่าระดับรายการใช้ "ความจุ" สำหรับแนวคิดที่คล้ายกัน (แต่ไม่แน่นอน) แนะนำอาร์เรย์อาจใช้คำว่า "ความยาว" สำหรับเหตุผลทางประวัติศาสตร์
T[]
มีความยาว N T
เสมอเก็บว่าไม่มีค่าประเภท ความหมายไม่ใช่ว่าค่าทั้งหมดอาจมีความหมาย (อาจเป็นnull
ตัวอย่าง) แต่มีอยู่จริง สิ่งนี้แตกต่างจากความหมายปกติของความจุ (ตามList<T>
ตัวอย่างที่ใช้) คุณถูกที่Count
สามารถเปลี่ยนแปลงได้ในขณะที่Length
ไม่สามารถ จากนั้นอีกครั้งไม่มีอะไรเปลี่ยนแปลงคำสั่งที่Count
จริงแล้วจะเปลี่ยนแปลง มันยังใช้สำหรับคอลเลกชันที่ไม่เปลี่ยนรูป
count
-property