Por que o C # permite que você 'jogue nulo'?

Ao escrever um código de manipulação de exceção particularmente complexo, alguém perguntou, você não precisa se certificar de que seu objeto de exceção não seja nulo? E eu disse, claro que não, mas depois decidi tentar. Aparentemente, você pode lançar nulo, mas ainda é transformado em uma exceção em algum lugar.

Por que isso é permitido?

throw null;

Neste snippet, felizmente 'ex' não é nulo, mas poderia ser?

try
{
  throw null;
}
catch (Exception ex)
{
  //can ex ever be null?

  //thankfully, it isn't null, but is
  //ex is System.NullReferenceException
}

questionAnswers(7)

yourAnswerToTheQuestion