Help desk ticket log: fixed array to list

The first requirement is simple: keep player reports in the order they arrive so the game-support team can display a report log. Begin with a bounded situation: one scheduled multiplayer-game shift has exactly four on-call support slots, and each slot can hold the report currently assigned to that support specialist.

The bounded C# solution: Ticket[]

An array reserves a known number of slots. When C# creates an array with new Ticket[4], the program declares its capacity as four; the array’s size cannot grow. You can also create an array without writing the size when an initializer provides the elements, as in new[] { firstTicket, secondTicket }.

public record Ticket(string Id, string Title, int Priority, string? Assignee);

var onCallReports = new Ticket[4];
onCallReports[0] = new("GS-2042", "Player cannot join a match", 2, "Mina");
onCallReports[1] = new("GS-2043", "Season reward missing", 3, "Owen");

int onCallCapacity = onCallReports.Length; // 4

What works

The fixed array is clear and useful when capacity is genuinely known and predictable. It reserves four positions for the four scheduled on-call slots, and indexed access makes a particular slot easy to read or update. Some languages and APIs require this size at array creation because the array represents a fixed number of elements; C# also lets an initializer infer the size when the values are already written.

The limitation that remains

The array cannot hold a fifth on-call specialist without creating a new array, and unused slots remain part of its fixed capacity. It becomes awkward when more players report problems during a live event, or when the shift has fewer reports than expected. The next requirement is a normal report log whose size can grow and shrink with demand.

The flexible C# solution: List<T>

var ticketLog = new List<Ticket>
{
    new("GS-2042", "Player cannot join a match", 2, null),
    new("GS-2043", "Season reward missing", 3, null)
};

ticketLog.Add(new("GS-2044", "Account access locked", 1, null));
Ticket newestReport = ticketLog[^1];

The ^1 notation reads the last report in the list. Any access to the last item still needs an empty-list guard.

List<T> is the flexible default when the number of player reports can grow and shrink. It keeps arrival order while allowing the program to append reports without choosing a capacity in advance.

The limitation that remains

The list still does not answer “find report GS-2042” directly. The program must scan reports one at a time, which becomes slower as the log grows. It also does not prevent duplicate event IDs or select an urgent game outage without scanning and comparing reports.

The list preserves the report log, but it does not provide a direct lookup by report ID.