มีสิ่งสำคัญที่ผู้คนมักจะมองข้ามคือ:
คุณสามารถส่งอาเรย์ธรรมดาไปยังสิ่งที่ยอมรับIList<T>
พารามิเตอร์จากนั้นคุณสามารถโทรIList.Add()
และจะได้รับข้อยกเว้นรันไทม์:
Unhandled Exception: System.NotSupportedException: Collection was of a fixed size.
ตัวอย่างเช่นพิจารณารหัสต่อไปนี้:
private void test(IList<int> list)
{
list.Add(1);
}
หากคุณเรียกสิ่งต่อไปนี้คุณจะได้รับข้อยกเว้นรันไทม์:
int[] array = new int[0];
test(array);
สิ่งนี้เกิดขึ้นเนื่องจากการใช้อาร์เรย์ธรรมดาที่IList<T>
ละเมิดหลักการทดแทน Liskov
ด้วยเหตุนี้ถ้าคุณกำลังเรียกIList<T>.Add()
คุณอาจต้องการที่จะต้องพิจารณาต้องแทนList<T>
IList<T>