Olá
Utilize a primeira para acesso simples a uma propriedade, onde não será preciso nenhuma lógica a ser aplicada.
Utilize a segunda quando a propriedade é mais complexa.
public string FirstName
{
get => firstName;
set => firstName = (!string.IsNullOrWhiteSpace(value)) ? value : throw new ArgumentException("First name must not be blank");
}
private string firstName;
Meios de definir um proprieade
public string FirstName { get; set; }
public string FirstName { get; set; } = string.Empty; //Inicializa com vazio
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
private string firstName;
public string FirstName
{
get => firstName;
set => firstName = value;
}
private string firstName;
public string FirstName { get; private set; }
Para mais detalhes: https://docs.microsoft.com/pt-br/dotnet/csharp/properties