Я предполагаю, что у вас либо есть два класса с именем SomeClass
, которые оба находятся в пространствах имен, на которые вы ссылаетесь, либо у вас есть переменная или свойство с именем SomeClass
.В любой из этих ситуаций компилятор не сможет узнать, что вы пытаетесь вызвать статический метод MyMathLib.Addition.SomeClass.Work()
, но конкретное решение, предлагаемое компилятором, делает его более вероятным первым.
Обновление
Видя ваши изменения, это имеет смысл.Если бы вы использовали их в пространстве имен за пределами MyMathLib
, то вы все равно смогли бы избежать этого конфликта пространства имен.Однако, поскольку вы находитесь внутри пространства имен MyMathLib.Subtraction
, компилятор будет неявно рассматривать любую часть пространства имен «над» вами, чтобы иметь приоритет над именами классов.В этом случае, когда вы говорите «Добавление», компилятор ищет следующие элементы для разрешения имени:
- Класс, явно указанный в директиве
using ... = ...
. MyMathLib.Subtraction.Addition
пространство имен. MyMathLib.Addition
пространство имен. Addition
пространство имен. - Любые классы в пространствах имен, определенные с помощью операторов
using
.
В этом случае вы попадаете на № 3 перед № 4, поэтому вы можете обойти его, переименовав класс или пространство имен, или воспользовавшись предложением Яхии (# 1):
using Addition = MyMathLib.Addition.Addition;
Обновление 2
После просмотра статьи, на которую вы ссылаетесь, звучит так, будто явное выражение using
все равно не будет работать.Я думаю, что пункт № 1 на самом деле оценивается ниже пункта № 4.Облом.Вы можете использовать псевдоним, чтобы локально присвоить классу другое имя:
using Add = MyMathLib.Addition.Addition;
...
var add = new Add();
Но, тем не менее, лучшим решением по-прежнему будет просто избежать коллизии пространства имен, полностью изменив свое пространство имен или имя класса..