Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие ошибки компилятора:
- CS0022: неправильное число индексов внутри [], ожидаемое "число"
-
CS0178: недопустимый описатель ранга: ожидаемый "
," или "]" - CS0248: невозможно создать массив с отрицательным размером
-
CS0270: размер массива нельзя указать в объявлении переменной (попробуйте инициализировать с выражением '
new') - CS0611: элементы массива не могут быть типами
- CS0623: инициализаторы массивов могут использоваться только в инициализаторе переменных или полей. Попробуйте использовать новое выражение.
- CS0650: недопустимый декларатор массива. Чтобы объявить управляемый массив, описатель ранга предшествует идентификатору переменной. Чтобы объявить поле буфера фиксированного размера, используйте фиксированное ключевое слово перед типом поля.
- CS0719: элементы массива не могут быть статическим типом
- CS0747: недопустимый декларатор элемента инициализатора.
- CS0820: не удается назначить инициализатор массива неявным типизированным локальным
- CS0826: не найден лучший тип для неявно типизированного массива.
- CS0846: ожидается инициализатор вложенного массива
- CS1063: лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
-
CS1552: описатель типа массива,
[]должен отображаться перед именем параметра - CS1586: создание массива должно иметь размер массива или инициализатор массива
- CS1920: инициализатор элементов не может быть пустым.
-
CS1921: лучший перегруженный метод соответствует неправильной сигнатуре для элемента инициализатора. Инициализируемый
Addдолжен быть доступным методом экземпляра. - CS1925: не удается инициализировать объект типа type с инициализатором коллекции.
- CS1950: лучший перегруженный метод Add для инициализатора коллекции имеет некоторые недопустимые аргументы.
-
CS1954: нельзя использовать лучший перегруженный метод для элемента инициализатора коллекции. Методы инициализатора коллекции "
Add" не могут иметьrefилиoutпараметры. - CS9174: не удается инициализировать тип с помощью литерала коллекции, так как тип не является конструктором.
- CS9176: для литерала коллекции нет целевого типа.
- CS9185: тип построителя CollectionBuilderAttribute должен быть не универсальным классом или структурой.
- CS9186: недопустимое имя метода CollectionBuilderAttribute.
-
CS9187: не удалось найти доступный метод с ожидаемой сигнатурой: статический метод с одним параметром типа
ReadOnlySpan<T>; и правильный тип возвращаемого значения - CS9188: Тип имеет коллекцию CollectionBuilderAttribute, но не тип элемента.
- CS9203: выражение коллекции этого типа нельзя использовать в этом контексте, так как оно может быть предоставлено вне текущей области.
- CS9210: эта версия System.Collections.Immutable.ImmutableArray<T>не может использоваться с выражениями коллекции.
-
CS9212: оператор распространения '
..' не может работать с переменными типа "type", так как "тип" не содержит общедоступного экземпляра или определения расширения для "member". - CS9213: целевой объект выражения коллекции "type" не имеет типа элемента.
- CS9214: тип выражения коллекции должен иметь применимый конструктор, который можно вызывать без аргументов.
- CS9215: тип выражения коллекции "type" должен иметь экземпляр или метод расширения "Add", который можно вызвать с одним аргументом.
- CS9222: Инициализатор коллекции приводит к бесконечной цепочке создания экземпляров коллекции «type».
- CS9332: Невозможно использовать оператор раскидывания '..' в выражении фильтра catch.
- CS9354: элемент 'with(...)' должен быть первым элементом
- CS9355: Конструкции 'with(...)' не поддерживаются для типа 'type'
- CS9356: аргументы элемента 'with(...)' не могут быть динамическими
- CS9357: элемент with(...)" для интерфейса только для чтения должен быть пустым, если присутствует
- CS9358: тип элемента этой коллекции не может быть ссылочной структурой или параметром типа, допускающим ссылочные структуры
- CS9359: Для метода 'method' нет перегрузки, принимающей 'number' аргументов типа 'with(...)'
Кроме того, в этой статье рассматриваются следующие предупреждения:
- CS1062: самый лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
- CS1064: лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
- CS3007: перегруженный метод "method" отличается только по неименованным типам массивов не соответствует CLS.
- CS3016: массивы в качестве аргументов атрибутов не соответствуют clS
- CS0251: индексирование массива с отрицательным индексом (индексы массива всегда начинаются с нуля)
- CS9208: выражение коллекции может привести к непредвиденным выделениям кучи. Рассмотрите возможность явного создания массива, а затем преобразования в окончательный тип, чтобы сделать выделение явным.
-
CS9209: выражение коллекции может привести к непредвиденным выделениям кучи из-за использования спредов "
..". Рассмотрите возможность явного создания массива, а затем преобразования в окончательный тип, чтобы сделать выделение явным. - CS9332: Невозможно использовать оператор раскидывания '..' в выражении фильтра catch.
Недопустимый доступ к элементу массива
- CS0022: неправильное число индексов внутри [], ожидаемое "число"
- CS0251: индексирование массива с отрицательным индексом (индексы массива всегда начинаются с нуля)
Чтобы правильно получить доступ к элементам массива, следуйте этим правилам индексирования. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).
- Укажите то же количество индексов, что и объявленные измерения (CS00222). Одномерный массив нуждается в одном индексе; Для трехмерного массива требуется три индекса.
- Используйте только неотрицательных целых чисел для индексов массива (CS0251). Индексы массива всегда начинаются с нуля.
Недопустимый инициализатор коллекции
- CS0747: недопустимый декларатор элемента инициализатора.
- CS1920: инициализатор элементов не может быть пустым.
-
CS1921: лучший перегруженный метод соответствует неправильной сигнатуре для элемента инициализатора. Инициализируемый
Addдолжен быть доступным методом экземпляра. - CS1922: не удается инициализировать тип type с инициализатором коллекции, так как тип не реализует system.Collections.IEnumerable.
- CS1925: не удается инициализировать объект типа type с инициализатором коллекции.
- CS1927: предупреждение: игнорировать /win32manifest для модуля, так как он применяется только к сборкам
- CS1950: лучший перегруженный метод Add для инициализатора коллекции имеет некоторые недопустимые аргументы.
-
CS1954: нельзя использовать лучший перегруженный метод для элемента инициализатора коллекции. Методы инициализатора коллекции "
Add" не могут иметьrefилиoutпараметры. - CS9174: не удается инициализировать тип с помощью литерала коллекции, так как тип не является конструктором.
- CS9176: для литерала коллекции нет целевого типа.
- CS9203: выражение коллекции этого типа нельзя использовать в этом контексте, так как оно может быть предоставлено вне текущей области.
- CS9210: эта версия System.Collections.Immutable.ImmutableArray<T> не может использоваться с выражениями коллекции.
-
CS9212: оператор распространения "
.." не может работать с переменными типа "type", так как "type" не содержит общедоступного экземпляра или определения расширения для "member". - CS9213: целевой объект выражения коллекции "type" не имеет типа элемента.
- CS9214: тип выражения коллекции должен иметь применимый конструктор, который можно вызывать без аргументов.
- CS9215: тип выражения коллекции "type" должен иметь экземпляр или метод расширения "Add", который можно вызвать с одним аргументом.
- CS9222: инициализатор коллекции приводит к бесконечной цепочке экземпляров коллекции type.
- CS9332: не удается использовать оператор распространения '..' в выражении фильтра предложения catch.
- CS9354: элемент "with(...)" должен быть первым элементом
- CS9355: "with(...)" элементы не поддерживаются для типа "type"
- CS9356: аргументы элементов with(...) не могут быть динамическими
- CS9357: элемент 'with(...)' для интерфейса, доступного только для чтения, должен быть пустым, если он присутствует
- CS9358: тип элемента этой коллекции не может быть ref struct или параметром типа, допускающим ref struct
- CS9359: Для метода 'method' нет перегрузки, принимающей 'number' аргументов с элементом 'with(...)'
Компилятор также может создать следующие предупреждения:
- CS1062: самый лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
- CS1063: лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
- CS1064: лучший перегруженный метод Add для элемента инициализатора коллекции устарел.
- CS9208: выражение коллекции может привести к непредвиденным выделениям кучи. Рассмотрите возможность явного создания массива, а затем преобразования в окончательный тип, чтобы сделать выделение явным.
-
CS9209: выражение коллекции может привести к непредвиденным выделениям кучи из-за использования спредов "
..". Рассмотрите возможность явного создания массива, а затем преобразования в окончательный тип, чтобы сделать выделение явным.
Чтобы создать допустимые инициализаторы коллекции, следуйте этим правилам. Дополнительные сведения см. в разделе "Выражения коллекции".
- Не смешивайте инициализацию свойств с добавлением элемента в том же инициализаторе (CS0747).
- Добавьте как минимум один элемент в инициализаторы коллекции, использующие фигурные скобки (CS1920).
- Убедитесь, что тип коллекции реализует
IEnumerable(CS1922). - Инициализаторы коллекций используются только с типами коллекций (CS1925).
-
AddУбедитесь, что метод доступен, принимает один параметр, соответствующий типу элемента, и не используетrefилиoutмодификаторы (CS1921, CS1954). - Разрешать неоднозначные
Addперегрузки методов (CS1950). - Предоставьте явный целевой тип для выражений коллекции, если компилятор не может вывести его (CS9176, CS9213).
- Убедитесь, что тип коллекции может быть создан с помощью конструктора без параметров (CS9174, CS9214).
- Не используйте
ref structтипы в выражениях коллекции, которые могут нарушать безопасность ссылок (CS9203). - Обновление до совместимой версии среды выполнения для
ImmutableArrayвыражений коллекции (CS9210). - Реализуйте шаблоны перечисления (например
GetEnumerator) для поддержки операторов распространения (CS9212). - Избегайте циклических зависимостей в инициализации коллекции (CS9222).
- Не используйте оператор расширения в фильтрующих выражениях catch (CS9332).
- Поместите элемент
with(...)первым в выражениях коллекции (CS9354). - Используйте
with(...)элементы только с типами, поддерживающими аргументы выражения коллекции (CS9355). - Не используйте динамические аргументы в
with(...)элементах (CS9356). - Используйте пустые
with()типы интерфейсов только для чтения (CS9357). - Не используйте типы структур ref в качестве типов элементов в коллекциях, которые не поддерживают их (CS9358).
- Сопоставляйте число
with(...)аргументов с доступными перегрузками конструктора (CS9359).
Недопустимый ранг массива
-
CS0178: недопустимый описатель ранга: ожидаемый "
," или "]" - CS0650: недопустимый декларатор массива. Чтобы объявить управляемый массив, описатель ранга предшествует идентификатору переменной. Чтобы объявить поле буфера фиксированного размера, используйте фиксированное ключевое слово перед типом поля.
-
CS1552: описатель типа массива,
[]должен отображаться перед именем параметра
Чтобы правильно объявить массивы, выполните правильный порядок синтаксиса. Дополнительные сведения см. в разделе "Массивы " и " Спецификация языка C# " для инициализаторов массивов.
Объявление массива состоит из этих токенов в порядке:
- Тип элементов массива (например,
intилиstringSomeClassType). - Квадратные скобки массива, которые при необходимости могут включать запятые для указания нескольких измерений.
- Имя переменной.
При указании измерений массива можно использовать следующее:
- Ряд элементов в фигурных скобках (
{и}) - Пустые квадратные скобки
- Одна или несколько запятых, заключенные в квадратные скобки
В следующих примерах представлены допустимые объявления массивов:
int[] anArrayOfIntegers;
string[,,] threeDimensionalStringArray;
Недопустимая длина массива
- CS0248: невозможно создать массив с отрицательным размером
- CS0270: размер массива нельзя указать в объявлении переменной (попробуйте инициализировать с помощью выражения new)
- CS1586: создание массива должно иметь размер массива или инициализатор массива
Чтобы создать массивы с допустимой длиной, укажите размер во время инициализации, а не во время объявления. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).
- Укажите длину массива как часть инициализации, а не объявления (CS0270).
- Используйте только положительные целые числа для измерений массива (CS0248).
- Укажите размер в
newвыражении или инициализаторе массива (CS1586).
В следующем примере показаны оба механизма:
int[] fiveIntegers = new int[5];
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
Недопустимый тип элемента
- CS0611: элементы массива не могут иметь тип "type"
- CS0719: элементы массива не могут быть статическим типом
- CS0820: не удается назначить инициализатор массива неявным типизированным локальным
- CS0826: не найден лучший тип для неявно типизированного массива
Чтобы использовать массивы с правильными типами элементов, следуйте этим ограничениям типа. Дополнительные сведения см. в разделе "Неявно типизированные локальные переменные " и лучший распространенный тип.
- Не используйте ограниченные типы, такие как System.TypedReference и System.ArgIterator типы элементов массива (CS0611).
- Не используйте
staticклассы в качестве типов элементов массива, так как экземпляры не могут быть созданы (CS0719). - Инициализировать неявно типизированные массивы через выражение
new(CS0820). - Убедитесь, что все элементы в инициализаторе неявно типизированного массива имеют лучший распространенный тип (CS0826).
В следующих примерах показано, как объявить неявно типизированные массивы:
var implicitType = new[] { 1, 2, 3 };
char c = 'c';
short s1 = 0;
short s2 = -0;
short s3 = 1;
short s4 = -1;
// common type is "int"
var commonType = new[] { s1, s2, s3, s4, c, 1 };
Чтобы обеспечить лучший распространенный тип, используйте любой из следующих методов:
- Явно присвойте тип массиву.
- Присвойте всем элементам массива один и тот же тип.
- Предоставьте явные приведения к элементам, которые могут вызвать проблему.
Недопустимый инициализатор массива
- CS0623: инициализаторы массивов могут использоваться только в инициализаторе переменных или полей. Попробуйте использовать новое выражение.
- CS0846: ожидается инициализатор вложенного массива
- CS1925: не удается инициализировать объект типа type с инициализатором коллекции.
Эти ошибки указывают на недопустимый синтаксис инициализатора массива. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).
Чтобы создать допустимые инициализаторы массива, выполните приведенные далее действия.
- Инициализаторы массива используются только в объявлениях переменных или полей (CS0623).
newИспользуйте выражение в других контекстах. - Балансируйте фигурные скобки (
{и}) вокруг элементов или дочерних массивов (CS0846). - Убедитесь, что выражение инициализации соответствует количеству массивов в инициализации зубчатого массива.
- Инициализаторы коллекций используются только с типами коллекций, а не с массивами или другими типами (CS1925).
Построитель недопустимых коллекций
- CS9175: дерево выражений может не содержать выражения коллекции.
- CS9177: тип возвращаемого значения метода построителя CollectionBuilderAttribute должен соответствовать типу коллекции, используемому в улучшении.
- CS9178: для естественного типа "type" нет целевого типа.
- CS9179: тип выражения коллекции должен иметь применимый конструктор, который можно вызывать без аргументов.
- CS9180: метод построителя CollectionBuilderAttribute должен быть статическим методом.
- CS9181: тип параметра метода построителя CollectionBuilderAttribute должен соответствовать параметру ReadOnlySpan<{0}>.
- CS9182: Недопустимый 'CollectionBuilderAttribute'. Соответствующий метод '{0}' не найден в типе построителя '{1}'.
- CS9183: тип возвращаемого метода CollectionBuilderAttribute должен быть не абстрактным типом интерфейса, который можно использовать в качестве типа.
- CS9185: статический тип нельзя использовать в качестве аргумента типа.
-
CS9186:
CollectionBuilderAttributeнедопустимое имя метода. - CS9187: Не удалось найти доступный метод 'Create' с ожидаемой сигнатурой: статический метод с одним параметром типа 'ReadOnlySpan<{0}>' и типом возврата '{1}'.
- CS9188: "scoped" нельзя использовать в качестве модификатора для параметра типа выражения коллекции.
- CS9190: метод CollectionBuilderAttribute "builderMethod" является неприменимым, так как он является универсальным.
- CS9192: встроенные преобразования массивов нельзя использовать с выражениями коллекций.
- CS9193: Аргумент "аргумент" нельзя передавать с ключевым словом "ref".
- CS9194: Аргумент 'argument' не должен быть передан с ключевым словом out
- CS9195: аргумент "аргумент" не может быть передан с ключевым словом "in"
- CS9196: функция "выражение коллекции" недоступна в C# "версия". Используйте языковую версию "requiredVersion" или более поздней.
- CS9197: Функция 'встроенные массивы' недоступна в C# 'версии'. Используйте языковую версию 'requiredVersion' или более позднюю.
- CS9198: Функциональность "ref и unsafe в методах async и iterator" недоступна в C# "version". Пожалуйста, используйте языковую версию "requiredVersion" или более позднюю.
- CS9199: функция "выражение коллекции" недоступна в C# "версия". Используйте языковую версию "requiredVersion" или более поздней.
- CS9202: Возможность "ref readonly parameters" недоступна в версии C# "version". Используйте версию языка "requiredVersion" или выше.
- CS9208: оператор nameof нельзя использовать в доступе к встроенному массиву.
- CS9209: возвращаемое свойство ref не может использоваться в качестве аргумента значения.
- CS9211: выражение должно быть типа "тип", так как оно присваивается по ссылке
- CS9212: не удается использовать выражение коллекции в качестве значения в фиксированной инструкции
- CS9217: локальный параметр "ref" нельзя сохранить в пределах границы "await" или "yield".
- CS9218: paramName является структурой ссылок и не может быть типом параметра
- CS9221: Тип "type" не может быть ссылочной структурой или параметром типа, допускающим ссылочные структуры, чтобы использовать его в качестве параметра "параметр" в универсальном типе или методе "member".
- CS9223: структура, содержащая поля ref, не может использоваться в выражении коллекции.
- CS9228: объявление не переменной структуры ссылок запрещено
- CS9232: объявления частичных методов имеют различия между сигнатурами.
- CS9233: модификатор file можно использовать только для типов, определенных на верхнем уровне в единице компиляции.
Чтобы правильно создать выражения коллекции с атрибутами построителя коллекций, следуйте этим требованиям. Дополнительные сведения см. в разделе "Выражения коллекции".
- Убедитесь, что целевой тип имеет тип итерации, поддерживающий
foreach(CS9188). - Не используйте универсальные типы в качестве типов построителя коллекций (CS9185).
- Проверьте, допустимо ли имя метода, указанное в
CollectionBuilderAttribute(CS9186). - Применяется
CollectionBuilderAttributeтолько к статическим методам, которые соответствуют требуемой сигнатуре: возвращают тип коллекции и принимаютReadOnlySpan<T>параметр, гдеTсоответствует типу элемента (CS9180, CS9181, CS9182, CS9183, CS9187, CS9190). - Убедитесь, что возвращаемый тип совпадает и не является абстрактным или интерфейсом (CS9177, CS9183).
- Не используйте структуры ссылок или типы с полями ссылок в выражениях коллекции (CS9218, CS9221, CS9223, CS9228).
- Избегайте использования выражений коллекции в деревах выражений (CS9175).
- Используйте правильную версию языка для выражений коллекции и связанных функций (CS9196, CS9197, CS9198, CS9199, CS9202).
Предупреждения спецификации общего языка
- CS3007: перегруженный метод "method" отличается только по неименованным типам массивов не соответствует CLS.
- CS3016: массивы в качестве аргументов атрибутов не соответствуют clS
Чтобы написать код, совместимый с CLS, с массивами, следуйте этим рекомендациям. Дополнительные сведения см. в разделе о независимости языка.
- Не создавайте перегруженные методы, которые отличаются только в типах элементов массива (CS3007).
- Не используйте массивы в качестве аргументов атрибутов (CS3016).
CS3007 возникает, если у вас есть перегруженный метод, принимаюющий массив, и единственное различие между сигнатурами метода — это тип элемента массива. Чтобы избежать этой ошибки, рассмотрите возможность использования прямоугольного массива, а не массива с замеченным массивом или, если соответствие CLS не требуется, удалите CLSCompliantAttribute атрибут. Дополнительные сведения о соответствии спецификации CLS см. в разделе Независимость от языка и независимые от языка компоненты.
CS3016 указывает, что не соответствует спецификации CLS, чтобы передать массив атрибуту. Дополнительные сведения о соответствии CLS см. в статье о независимости языка и независимых от языка компонентах.