Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие ошибки компилятора:
- CS0138: ошибка: директива пространства имен с использованием может применяться только к пространствам имен; "type" — это тип, а не пространство имен.
- CS0431: ошибка: не удается использовать псевдоним "идентификатор",
::так как псевдоним ссылается на тип. Используйте.вместо этого. - CS0432: ошибка: псевдоним "идентификатор" не найден.
- CS0576: ошибка: пространство имен "пространство имен" содержит определение, конфликтующее с псевдонимом "идентификатор".
- CS0687: ошибка: квалификатор
::пространства имен всегда разрешается в тип или пространство имен, поэтому здесь запрещено. Вместо этого рекомендуется использовать.. - CS1529: ошибка: предложение using должно предшествовать всем другим элементам, определенным в пространстве имен, кроме объявлений экстерна псевдонима.
- CS1537: ошибка: в этом пространстве имен появился псевдоним с использованием псевдонима.
- CS7000: ошибка: неожиданное использование псевдонима.
- CS7007: ошибка: директива
using staticможет применяться только к типам. Вместо этого рассмотрим директивуusing namespace - CS8083: ошибка: полное имя псевдонима не является выражением.
- CS8085: ошибка: директива using static не может использоваться для объявления псевдонима.
- CS8914: ошибка: глобальная директива using не может использоваться в объявлении пространства имен.
- CS8915: ошибка: глобальная директива using должна предшествовать всем директивам, отличным от глобального использования.
- CS9055: ошибка: локальный тип файла нельзя использовать в директиве global using static.
- CS9130: ошибка: использование псевдонима не может быть типом
ref. - CS9131: ошибка: может быть
unsafeтолько псевдоним с использованием. - CS9132: ошибка: использование псевдонима не может быть ссылочным типом, допускаемым значением NULL.
- CS9133: ошибка:
staticмодификатор должен предшествоватьunsafeмодификатору. - CS9162: тип недопустим для "using static". Можно использовать только класс, структуру, интерфейс, перечисление, делегат или пространство имен.
И следующие предупреждения компилятора:
- CS0105: Предупреждение: директива using для пространства имен появилась ранее в этом пространстве имен.
- CS0440: Предупреждение. Определение псевдонима с именем
globalне рекомендуется, так какglobal::всегда ссылается на глобальное пространство имен, а не псевдоним. - CS8019: сведения: ненужная директива using.
- CS8933: Информация: директива using появилась ранее в качестве глобального использования.
Эти ошибки и предупреждения указывают, using что директива не сформирована правильно. В следующих разделах рассматриваются эти ошибки и способы их исправления.
Директива Using
Директива using должна предшествовать любым другим элементам в namespace объявлении или перед любыми namespace объявлениями в файле. Установка using директивы позже в файле приводит компилятору к возникновению ошибки CS1529:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Чтобы устранить эту проблему, переместите все using объявления в верхнюю часть файла или в верхней части пространства имен:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Компилятор выдает предупреждение CS8933, CS0105 или диагностики CS8019 для повторяющихся using директив из using или global using директивы. Можно удалить любые дубликаты.
Неправильное объединение using директивы с unsafe staticglobalмодификаторами или модификаторами using директивы рассматривается далее в этой статье.
Использование статической директивы
Директива using static импортирует члены одного типа в текущее пространство имен. В следующем примере методы импортируются из System.Console, например WriteLine , в текущее пространство имен:
using static System.Console;
Компилятор создает CS0138 , если не указан static модификатор:
using System.Console; // CS0138
Компилятор создает CS7007 , если включить static модификатор импорта пространства имен вместо типа:
using static System; // CS7007
Компилятор выдает CS9162, если символ не является одним из соответствующих типов.
При объединении static модификатора с unsafe модификатором using в директиве static модификатор должен быть первым:
using static unsafe UnsafeExamples.UnsafeType;
Глобальная директива using
Директива global using импортирует пространство имен или тип во всех исходных файлах в текущем проекте:
global using System.Text;
Любые global using директивы должны предшествовать любым не глобальным using директивам в этом исходном файле и не должны быть помещены в файл namespace. Это приводит к тому, что CS8915 и CS8914 соответственно.
Кроме того, директива static global using не может ссылаться на локальный тип файла.
Квалификатор псевдонима
Квалификатор псевдонима, ::предшествует псевдониму пространства имен или следует псевдониму global . Если вы используете, где . следует использовать для разделения элементов полного имени, компилятор выдает один из CS0431, CS0432, CS0687, *CS7000 или CS8083.::
Во всех случаях замените :: . разделитель.
Кроме того, при определении псевдонима с именем globalкомпилятор выдает CS0440. Псевдоним global всегда ссылается на глобальное пространство имен. Объявление псевдонима для него не работает, и вы должны выбрать другое имя для псевдонима.
Конфликты имен псевдонимов
Псевдоним можно объявить в пространстве имен или типе using с помощью директивы:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Необходимо попытаться создать уникальное имя псевдонима, имя слева = от входа в предыдущих примерах. Использование имени, которое уже сопоставляется с типом (например Object) или пространством имен (System) может вызвать CS0576 или CS1537.
Ограничения на использование псевдонимов
До C# 12 язык ввел эти ограничения на using директивы, создающие псевдоним для объявления типа:
Невозможно создать псевдоним с директивой
using static:using static con = System.Console; using static unsafe ip = int*;
Начиная с C# 12, вводятся следующие ограничения:
Нельзя использовать
inrefмодификаторы илиoutмодификаторы в псевдониме:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;Директива
unsafe usingдолжна указывать псевдоним или :static using// Elsewhere: public namespace UnsafeExamples { public unsafe static class UnsafeType { // ... } } // Using directives: using unsafe IntPointer = int*; using static unsafe UnsafeExamples.UnsafeType; using unsafe UnsafeExamples; // not allowedНельзя создать псевдоним для типа ссылок, допускающего значение NULL:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed