Rewritten to be more clear
The field is generated alright, but it is not visible to your code as a regular field.
Here's your typical automatic property:
public string FirstName { get; set; }
which, if we look at the compiled assembly, produces this backing store field:
[CompilerGenerated]
private string <FirstName>k__BackingField;
Note the < and > in there, which are not characters you can use in your own field names. Nor can you access that field, because it doesn't "exist" as far as the compiler cares, when it looks at your code.
The real question here, from me, is why you would want to access that field. In other words, why do you need access to the field, and what does it do for your code that accessing the property don't do?
If you want to prevent outside write-access to the field, that's easily doable by making the setter method private, like this:
public string FirstName { get; private set; }
Note that since the field is actually present in the assembly, it means that this is not JITter magic, but compiler magic, and thus you could use reflection to find, and access, that field.
But again, why would you want to?
Now, let's assume that there really is a legitimate reason for you wanting to use the field, instead of the property. I can think of one, though I would probably do it differently, and that would be that you want to pass the field name to a method as an out or ref parameter, like this:
public void AdjustName(ref String name)
{
name = Capitalize(name);
}
You can't pass properties as out/ref-parameters, so this code won't work:
AdjustName(ref string FirstName);
In this case, you need to fall back to the "old" way of defining properties, adding the backing store field manually, like this:
private string firstName;
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
With this in place, you can call that method:
AdjustName(ref string firstName); // note the field, not the property
However, I would probably change that method in order to return the new value, instead of directly adjusting a referenced variable.