There is a collection in .Net used to manage values in a [Queue](<https://msdn.microsoft.com/library/system.collections.queue(v=vs.110).aspx>) that uses the FIFO (first-in first-out) concept. The basics of queues is the method [Enqueue(T item)](<https://msdn.microsoft.com/library/t249c2y7(v=vs.110).aspx>) which is used to add elements in the queue and [Dequeue()](<https://msdn.microsoft.com/library/1c8bzx97(v=vs.110).aspx>) which is used to get the first element and remove it from the queue. The generic version can be used like the following code for a queue of strings.

First, add the namespace:

using System.Collections.Generic;

and use it:

Queue<string> queue = new Queue<string>();
queue.Enqueue("John");
queue.Enqueue("Paul");
queue.Enqueue("George");
queue.Enqueue("Ringo");

string dequeueValue;
dequeueValue = queue.Dequeue(); // return John
dequeueValue = queue.Dequeue(); // return Paul
dequeueValue = queue.Dequeue(); // return George
dequeueValue = queue.Dequeue(); // return Ringo

There is a non generic version of the type, which works with objects.

The namespace is:

using System.Collections;

Adn a code sample fo non generic queue:

Queue queue = new Queue();
queue.Enqueue("Hello World"); // string
queue.Enqueue(5); // int
queue.Enqueue(1d); // double
queue.Enqueue(true); // bool
queue.Enqueue(new Product()); // Product object

object dequeueValue;
dequeueValue = queue.Dequeue(); // return Hello World (string)
dequeueValue = queue.Dequeue(); // return 5 (int)
dequeueValue = queue.Dequeue(); // return 1d (double)
dequeueValue = queue.Dequeue(); // return true (bool)
dequeueValue = queue.Dequeue(); // return Product (Product type)

There is also a method called Peek() which returns the object at the beginning of the queue without removing it the elements.

Queue<int> queue = new Queue<int>();
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
queue.Enqueue(40);
queue.Enqueue(50);

foreach (int element in queue)
{
    Console.WriteLine(i);
}

The output (without removing):

10
20
30
40
50