constใช้สำหรับค่าคงที่เวลาคอมไพล์ คุณสามารถสร้างได้static readonlyแต่จะใช้กับMETRICSตัวแปรเท่านั้น (ซึ่งโดยทั่วไปควรเป็นเมตริกแทนโดยหลักการตั้งชื่อ. NET ) มันจะไม่ทำให้รายการไม่เปลี่ยนรูป - มีคนโทรมาได้METRICS.Add("shouldn't be here");
คุณอาจต้องใช้ a ReadOnlyCollection<T>ห่อมัน ตัวอย่างเช่น:
public static readonly IList<String> Metrics = new ReadOnlyCollection<string>
(new List<String> {
SourceFile.LoC, SourceFile.McCabe, SourceFile.NoM,
SourceFile.NoA, SourceFile.FanOut, SourceFile.FanIn,
SourceFile.Par, SourceFile.Ndc, SourceFile.Calls });
ReadOnlyCollection<T>เพียงแค่รวมคอลเลกชันที่อาจเปลี่ยนแปลงไม่ได้ แต่List<T>หลังจากนั้นไม่มีอะไรจะเข้าถึงคุณสามารถมองว่าคอลเล็กชันโดยรวมนั้นไม่เปลี่ยนรูปได้
(การใช้อักษรตัวพิมพ์ใหญ่ในที่นี้ส่วนใหญ่เป็นการคาดเดา - การใช้ชื่อที่สมบูรณ์จะทำให้ชัดเจนยิ่งขึ้น IMO)
ไม่ว่าคุณจะประกาศว่ามันเป็นIList<string>, IEnumerable<string>, ReadOnlyCollection<string>หรือสิ่งอื่นขึ้นอยู่กับคุณ ... ถ้าคุณคาดหวังว่ามันควรจะได้รับการปฏิบัติเป็นลำดับแล้วIEnumerable<string>อาจจะเหมาะสมที่สุด หากคำสั่งซื้อมีความสำคัญและคุณต้องการให้ผู้คนสามารถเข้าถึงได้ด้วยดัชนีIList<T>อาจเหมาะสม หากคุณต้องการทำให้ความไม่เปลี่ยนรูปชัดเจนให้ประกาศว่าReadOnlyCollection<T>มีประโยชน์ แต่ไม่ยืดหยุ่น