It is exactly an infinite loop.
No, it’s not the same thing.
The C# decrement operator --
comes in two variants, which Microsoft refers to as “postfix” and “prefix”.
You’re using the “postfix” form, i.e. emails--
. The output of this operator, i.e. the value you get back if you assign it to another variable, is the value of the operand before the operation.
Your code is therefore repeatedly re-assigning emails
to the same value, and never decrementing it. We can demonstrate this like so:
int number = 3;
Console.WriteLine(number); // output: 3
Console.WriteLine(number--); // output: 3
Console.WriteLine(number); // output: 2
Conversely, if we were using the “prefix” form of the operator - which would be --emails
- then the output of that operation is the value of the operator after the operation is performed. Like so:
int another_number = 3;
Console.WriteLine(another_number); // output: 3
Console.WriteLine(--another_number); // output: 2
Console.WriteLine(another_number); // output: 2
As a demonstration:
using System;
class MainClass {
public static void Main (string[] args) {
int emails = 5;
Console.WriteLine("The value of 'emails' is: " + emails); // output: The value of 'emails' is: 5
emails = emails--;
Console.WriteLine("The value of 'emails' after the decrement operator -- is: " + emails); // output: The value of 'emails' after the decrement operator -- is: 5
}
}
As you can see, the value of emails
never changes so the condition for your while
loop never becomes false. Thus, the code never finishes. 
Does that help? You can run my terrible example code above on a repl, if you want.
Edit: The above stuff about “postfix” and “prefix” operators is semantic, really.
To fix your code, you can do either of the following.
Solution A - Use the decrement operator only
while (emails > 0)
{
emails--;
}
Solution B - Write the full arithmetic operation “longhand”
while (emails > 0)
{
emails = emails - 1;
}