Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Компилятор создает следующие ошибки, если аргумент не указан для формального параметра, или аргумент недействителен для этого параметра:
- CS0182: аргумент атрибута должен быть константным выражением,
typeof
выражением или выражением создания массива типа параметра атрибута - CS0591: недопустимое значение для аргумента атрибута
- CS0599: недопустимое значение для именованного аргумента атрибута "argument"
- CS0617: недопустимый именованный аргумент атрибута. Именованные аргументы атрибутов должны быть полями, которые не читаются, не являются статическими, статическими или константными или свойствами записи чтения, которые являются общедоступными и не статическими.
- CS0633: аргумент атрибута должен быть допустимым идентификатором.
- CS0643: повторяющийся именованный аргумент атрибута
- CS0655: недопустимый аргумент именованного атрибута, так как он не является допустимым типом параметра атрибута
- CS0839: отсутствует аргумент.
- CS1016: ожидаемый аргумент именованного атрибута
- CS1739: лучшая перегрузка для не имеет параметра с именем
- CS1740: именованный аргумент нельзя указать несколько раз
- CS1742: доступ к массиву может не иметь именованного описателя аргументов
- CS1744: именованный аргумент указывает параметр, для которого уже задан позиционный аргумент.
- CS1746: делегат не имеет параметра с именем "name"
- CS7036: нет аргумента, соответствующего требуемому параметру.
- CS7067: параметр конструктора атрибутов является необязательным, но значение параметра по умолчанию не указано.
- CS8324: спецификации именованных аргументов должны отображаться после указания всех фиксированных аргументов в динамическом вызове.
- CS8905: указатель функции не может вызываться с именованными аргументами.
- CS8943: null не является допустимым именем параметра. Чтобы получить доступ к получателю метода экземпляра, используйте пустую строку в качестве имени параметра.
- CS8944: метод не является методом экземпляра, получатель не может быть интерполированным аргументом обработчика строк.
- CS8945: недопустимое имя параметра.
- CS8948:
InterpolatedStringHandlerArgumentAttribute
аргументы не могут ссылаться на параметр, в который используется атрибут. - CS8949:
InterpolatedStringHandlerArgumentAttribute
примененный к параметру неправильный формат и не может быть интерпретирован. Создайте экземпляр вручную. - CS8950: параметр является аргументом преобразования интерполированного строкового обработчика для параметра, но соответствующий аргумент указывается после интерполированного строкового выражения. Переупорядочение аргументов.
- CS8951: параметр не указан явно, но используется в качестве аргумента для преобразования интерполированного обработчика строк для параметра.
- CS8964: может применяться только к параметрам со значениями по умолчанию.
CallerArgumentExpressionAttribute
- CS8965:
CallerArgumentExpressionAttribute
примененный к параметру не будет влиять, так как он самонаправлен. - CS8966:
CallerArgumentExpressionAttribute
не будет влиять, так как он применяется к элементу, который используется в контекстах, которые не разрешают необязательные аргументы
Отсутствующий аргумент
Следующие общие ошибки выдаются, когда компилятор не может сопоставить аргументы со всеми параметрами-членами:
- CS0839: отсутствует аргумент.
- CS7036: нет аргумента, соответствующего требуемому параметру.
Эти ошибки являются общими: компилятор не может соответствовать аргументам, заданным в вызове метода к необходимым параметрам метода. Проверьте следующие причины:
- Убедитесь, что вы включили все необходимые аргументы.
- Убедитесь, что аргументы находятся в правильном порядке.
- Убедитесь, что все аргументы являются правильным типом.
- Убедитесь, что правила разрешения перегрузки выбрали ожидаемый метод.
Вы также можете увидеть CS7036 , если вы написали перегруженные локальные функции. Локальные функции не могут быть перегружены. Компилятор распознает только первую локальную функцию с таким именем. Проверьте, нужно ли вызывать другую локальную функцию.
Эти ошибки часто появляются с другими диагностика, которые могут помочь диагностировать правильную причину.
Аргументы атрибутов
Компилятор выдает эти ошибки при неправильном аргументе конструктора атрибутов:
- CS0182: аргумент атрибута должен быть константным выражением,
typeof
выражением или выражением создания массива типа параметра атрибута - CS0591: недопустимое значение для аргумента атрибута
- CS0599: недопустимое значение для именованного аргумента атрибута "argument"
- CS0617: недопустимый именованный аргумент атрибута. Именованные аргументы атрибутов должны быть полями, которые не читаются, не являются статическими, статическими или константными или свойствами записи чтения, которые являются общедоступными и не статическими.
- CS0633: аргумент атрибута должен быть допустимым идентификатором.
- CS0643: повторяющийся именованный аргумент атрибута
- CS0655: недопустимый именованный аргумент атрибута, так как он не является допустимым типом параметра атрибута
Если вы используете определение атрибута System.AttributeUsageAttribute , убедитесь, что допустимые значения не являются взаимоисключающими. Проверьте правильность типа и порядка аргументов атрибута. Убедитесь, что текст строковых аргументов является допустимым. Для многих атрибутов аргумент должен быть допустимым идентификатором C#. Аргументы конструкторов атрибутов должны быть константами времени компиляции. Поэтому они ограничены типами, поддерживающими литеральные константы. Кроме того, следующие типы, разрешающие константы литералов, запрещены в качестве параметров атрибута:
Не удается указать повторяющиеся именованные аргументы с одинаковым именем параметра. При инициализации атрибута можно задать только доступные свойства. Не удается задать частные свойства.
Именованные и необязательные параметры и аргументы
Компилятор выдает следующие ошибки для неправильного использования именованных и необязательных аргументов:
- CS1016: ожидаемый аргумент именованного атрибута
- CS1739: лучшая перегрузка для не имеет параметра с именем
- CS1740: именованный аргумент нельзя указать несколько раз
- CS1742: доступ к массиву может не иметь именованного описателя аргументов
- CS1744: именованный аргумент указывает параметр, для которого уже задан позиционный аргумент.
- CS1746: делегат не имеет параметра с именем "name"
- CS7067: параметр конструктора атрибутов является необязательным, но значение параметра по умолчанию не указано.
- CS8324: спецификации именованных аргументов должны отображаться после указания всех фиксированных аргументов в динамическом вызове.
- CS8905: указатель функции не может вызываться с именованными аргументами.
Проверьте следующие причины следующих ошибок:
- Неверное имя параметра именованного аргумента.
- Выбранная перегрузка не имеет параметра, соответствующего именованного аргумента.
- Имя параметра повторяется для нескольких аргументов.
- Позиционный аргумент (неназванный) отображается после именованных аргументов.
- Именованные аргументы не допускаются для параметров индекса массива.
Обработчик интерполированных строк
Компилятор выдает следующие ошибки при неправильном указании интерполированного обработчика строк.
- CS8943: null не является допустимым именем параметра. Чтобы получить доступ к получателю метода экземпляра, используйте пустую строку в качестве имени параметра.
- CS8944: не метод экземпляра, получатель не может быть интерполированным аргументом обработчика строк.
- CS8945: недопустимое имя параметра.
- CS8948:
InterpolatedStringHandlerArgumentAttribute
аргументы не могут ссылаться на параметр, в который используется атрибут. - CS8949:
InterpolatedStringHandlerArgumentAttribute
примененный к параметру неправильный формат и не может быть интерпретирован. Создайте экземпляр вручную. - CS8950: параметр является аргументом преобразования интерполированного строкового обработчика для параметра, но соответствующий аргумент указывается после интерполированного строкового выражения.
- CS8951: параметр не указан явно, но используется в качестве аргумента для преобразования интерполированного обработчика строк для параметра.
Интерполированный обработчик строк — это конструкция на основе шаблонов. Важно правильно получить шаблон. Ознакомьтесь со спецификацией функции или следуйте инструкциям по созданию интерполированного обработчика строк.
Сведения об отладке вызывающего абонента
Компилятор выдает следующую ошибку при неправильном использовании System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:
- CS8964: может применяться только к параметрам со значениями по умолчанию.
CallerArgumentExpressionAttribute
Кроме того, компилятор выдает следующие предупреждения о неправильном использовании CallerArgumentExpressionAttribute
:
- CS8965:
CallerArgumentExpressionAttribute
примененный к параметру не будет влиять, так как он самонаправлен. - CS8966:
CallerArgumentExpressionAttribute
не будет влиять, так как он применяется к элементу, который используется в контекстах, которые не разрешают необязательные аргументы
Любой параметр, аннотированный атрибутом CallerArgumentExpression
, должен иметь значение по умолчанию.