Ответ 1
Eric Lippert в блогах (части one; two; three; four) дают хорошее представление об этом. Из первой части:
Это показывает интересный момент о дизайне алгоритма "привязки типа" в С#. То есть, алгоритм, определяющий тип или пространство имен, называется "X.Y". Мы не "отступаем". Мы не говорим "хорошо, предположим, что X означает это. Тогда Y не имеет смысла. Давайте отступим, предположим, что X означает это другое, о, да, тогда Y имеет значение". Мы выясняем, что X однозначно означает, и только тогда мы выясним, что означает Y. Если X неоднозначно, мы не проверяем все возможности, чтобы увидеть, есть ли у кого из них Y, мы просто сдаемся.
Здесь у нас есть только X, но я думаю, что компилятор пытается выяснить, означает ли это пространство имен или тип, прежде чем проверять, есть ли что-нибудь еще после него.
Лично я не против этого ограничения. Это означает, что вам не рекомендуется писать код с пространством имен и классом, называемым одним и тем же, - и, как та путающая ситуация с человеческой точки зрения, я рад за то, что он обескуражен.