I know stack is best and easiest way, yet could it be possible to obtain the last element in a queue without having to dequeue anything?
You can simply do:
// Assumes T is a reference type, if it's a value type, then
// you will get an instance with the bits zeroed out.
T item = queue.LastOrDefault();
The problem here is that every time you want to get the last item in the Queue, you have to iterate through every item in the queue.
If it's important to you to have access to the first and last elements of a queue, then you might want to consider a double-ended queue.