Queue implementation using linked list
Good

You are following the .NET Naming Guidelines
The variables are in the correct scope

Review
Omitting braces {} although they might be optional can lead to hidden and therfore hard to track down bugs. I would like to encourage you to always use them.

Regarding public string PrintElements() I would suggest to simply override ToString() which is more idiomatic.

If we take a closer look at the Enqueue(int n) method we notice that the difference between the if and the else part is simply the value of next. We can remove this code duplication by adding a variable Node node and assign head like so
public void Enqueue(int n)
{
    Node node = head;
    head = new Node
    {
        value = n,
        next = node
    };
    
    size++;
}  

much better, isn't it ?

A C# developer would expect from a Queue that if the Queue is empty (in your case if size == 0) a call to Dequeue() would throw an InvalidOperationException.