Подтвердить что ты не робот

С#: проблема с попыткой разрешить класс, когда два пространства имен аналогичны

У меня возникает проблема, когда я не могу сделать ссылку на класс в другом пространстве имен. У меня есть 2 класса:

namespace Foo
{
    public class Class1 { ... }
}

namespace My.App.Foo
{
    public class Class2
    {
        public void SomeMethod()
        {
            var x = new Foo.Class1; // compile error!
        }
    }
}

Ошибка компиляции:

Тип или имя пространства имен 'Class1' не существует в пространстве имен 'My.App.Foo'

В этой ситуации я не могу заставить Visual Studio признать, что "Foo.Class1" относится к первому классу. Если я нахожусь над "Foo", это показывает, что его попытка разрешить это с помощью "My.App.Foo.Class1"

Если я поставлю строку:

using Foo;

в верхней части файла .cs, который содержит Class2, тогда он также разрешает это на "My.App.Foo".

Есть ли какой-то трюк для ссылки на правильное пространство имен Foo без простого переименования пространств имен, чтобы они не конфликтуют? Оба этих пространства имен находятся в одной и той же сборке.

4b9b3361

Ответ 1

Вы можете использовать global:: для глобального определения пространства имен: global::Foo.Class1 должен работать,

Вы также можете создать псевдоним global::Foo, чтобы упростить задачу. В верхней части исходного файла, под вашими операциями использования, добавьте:

using AliasClass1=global::Foo.Class1;

Теперь вы можете использовать:

AliasClass1 c = new AliasClass1();
// and so on.

Конечно, вы можете использовать лучшее имя, чем AliasClass: -)

Ответ 2

var x = new global::Foo.Class1();

Ответ 3

В дополнение к LBushkin ответ, вы можете быть заинтересованы в этих статьях Эрика Липперта:

Не называйте класс таким же, как его пространство имен, часть первая
Не называйте класс таким же, как его пространство имен, часть вторая
Не называйте класс таким же, как его пространство имен, часть третья
Не называйте класс таким же, как его пространство имен, часть четвертая

Они напрямую не связаны с вашей проблемой, но они дают интересную информацию о стратегиях именования