A linguagem C# permite que os tipos de dados primitivos possam também conter valor nulo. 
                Por exemplo, uma variável do tipo bool pode ter três valores: null, true ou false. 
                Para isso, utilizamos o operador (?) para declarar uma variável como nullable.
            
            
                Quando declaramos um variável posfixada com o operador (?) tornamos essa variável como nullable, 
                ou seja, um variável que aceita valor atribuição de valor null.
            
            Sintaxe
            tipo_dado? nome_variavel; //null
tipo_dado? nome_variavel = valor;
            Exemplo 1
            
using System;
public class Program
{
	public static void Main()
	{
		bool? flag = null;
		Console.WriteLine(flag);
		flag = true;
		Console.WriteLine(flag);
		flag = false;
		Console.WriteLine(flag);
	}
}
            Saída
            True
False
            
                Para manipular o valor de variável nullable mencionadas acima, utiilizamos as propriedades 
                HasValue e Value. A primeira verifica se um variável ou objeto possui valor e a
                segunda recuperar da variável.
            
            Sintaxe
            nome_variavel.HasValue;
nome_variavel.Value
            Exemplo 2
            using System;
public class Program
{
	public static void Main()
	{
		bool? variavel = null;
		Console.WriteLine(variavel.HasValue);
		variavel = true;
		Console.WriteLine(variavel.Value);
	}
}
            Saída
            False
True
            
                O aperador (?) também pode ser utilizado com conjunto com outros tipos de dados mais complexos 
                como Objetos, não ficando restrito aos tipos primitivos bem como aplicado em atributos de classes
                e parâmetros de métodos.
            
            
                Outros operadores relacionados à nulidade podem ser vistos em 
                Operadores: Outros operadores.