Breno,
Essa ? (interrogação) é para que a variável ou propriedade aceite valores nulos.
Mas também pode ser usado como operador condicional ternário, dai é outra história...
... tem também o duplo "??" (os operadores de união nula) mas esse eu NUNCA VI em nenhum código na minha vida toda.
Abaixo achei um exemplo legal, mas vou passar outro links para você ler, okay?
===============================================================
Para que serve a "interrogação" na declaração de tipos no C#? [duplicada]
Perguntada 7 anos, 5 meses atrás
DateTime? data = null; // Vai funcionar
DateTime data = null; // Erro -> DateTime não pode receber null
https://pt.stackoverflow.com/questions/125827/para-que-serve-a-interroga%C3%A7%C3%A3o-na-declara%C3%A7%C3%A3o-de-tipos-no-c
===============================================================
C# – Para Iniciantes – Parte 6 – Syntactic Sugar
Publicado em 29 de agosto de 2012
Olá pessoal, já ouviram falar de Syntactic Sugar ?
int? numero = null;
numero = 12;
https://www.eduardopires.net.br/2012/08/c-sharp-iniciantes-syntactic-sugar/
===============================================================
Operador ?: – o operador condicional ternário
Artigo - 26/07/2023
string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";
Console.WriteLine(GetWeatherDisplay(15)); // output: Cold.
Console.WriteLine(GetWeatherDisplay(27)); // output: Perfect!
https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/operators/conditional-operator
===============================================================
?? e os operadores ?? = - os operadores de união nula
Artigo - 28/07/2023
List<int> numbers = null;
int? a = null;
Console.WriteLine((numbers is null)); // expected: true
// if numbers is null, initialize it. Then, add 5 to numbers
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
Console.WriteLine((numbers is null)); // expected: false
Console.WriteLine((a is null)); // expected: true
Console.WriteLine((a ?? 3)); // expected: 3 since a is still null
// if a is null then assign 0 to a and add a to the list
numbers.Add(a ??= 0);
Console.WriteLine((a is null)); // expected: false
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/operators/null-coalescing-operator
===============================================================
Por favor, não esqueça de fechar o tópico se sua dúvida foi sanada e se te ajudei, não esqueça de me pontuar, tá okay?
Obrigado.
[]'s,
Fabio I.