Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие ошибки компилятора:
-
CS1100: метод имеет модификатор параметров "
this", который не относится к первому параметру -
CS1101: модификатор параметров '
ref' нельзя использовать с 'this'. -
CS1102: модификатор параметров '
out' нельзя использовать с 'this'. - CS1103: первый параметр метода расширения не может быть типом указателя.
- CS1105: методы расширения должны быть статическими.
- CS1106: методы расширения должны быть определены в не универсальном статическом классе.
- CS1109: методы расширения должны быть определены на статических классах верхнего уровня, "name" является вложенным классом.
- CS1110: не удается определить новое расширение, так как не удается найти требуемый тип ExtensionAttribute компилятора. Отсутствует ли ссылка на System.Core.dll?
-
CS1112: не используйте "ExtensionAttribute". Используйте ключевое слово '
this' вместо него. - CS1113: метод расширения, определенный для типа значения, нельзя использовать для создания делегатов.
- CS1743: не удается указать значение по умолчанию для параметра "этот".
- CS9281: объявления расширений могут не иметь имени.
- CS9282: объявления расширения могут включать только методы или свойства.
- CS9283: расширения должны быть объявлены в верхнем уровне, не универсальном, статичном классе.
- CS9284: параметр приемника расширения не может иметь значение по умолчанию.
- CS9285: контейнер расширения может иметь только один параметр приемника.
- CS9287: параметр приемника не может иметь то же имя, что и параметр типа контейнера расширения.
- CS9288: параметр, локальная переменная или локальная функция не могут иметь то же имя, что и параметр типа контейнера расширения.
- CS9289: параметр типа члена имеет то же имя, что и параметр типа контейнера расширения.
- CS9290: параметр, локальная переменная или локальная функция не могут иметь то же имя, что и параметр расширения.
-
CS9291: '
value': имя параметра, созданное автоматически, конфликтует с именем параметра расширения. - CS9292: параметр типа имеет то же имя, что и параметр расширения.
- CS9293: не удается использовать параметр расширения в этом контексте.
-
CS9294: '
value': имя автоматически созданного параметра конфликтует с именем параметра типа расширения. - CS9295: расширенный тип должен ссылаться на все параметры типа, объявленные расширением, но параметр типа не ссылается.
-
CS9300: параметр приемника "
ref" блока расширения должен быть типом значения или универсальным типом, ограниченным структурой. -
CS9301: параметр приемника "" или
in"ref readonly" расширения должен быть конкретным (не универсальным) типом значения. - CS9302: объявлен новый защищенный член в блоке расширения.
- CS9303: Нельзя объявлять экземплярные члены в блоке расширения с неименованным параметром получателя.
- CS9304: Невозможно объявить асессоры только для инициализации в блоке расширения.
- CS9305: не удается использовать модификаторы в параметре неназванного приемника блока расширения.
- CS9306: Типы и псевдонимы не могут называться "extension".
- CS9309: Синтаксис метода расширения запрещен в вложенной позиции внутри синтаксиса метода расширения.
-
CS9316: Члены расширения не разрешены в качестве аргумента для "
nameof". - CS9317: параметр унарного оператора должен быть расширенным типом.
- CS9318: тип параметра для ++ или -- должен быть расширенным типом.
- CS9319: один из параметров двоичного оператора должен быть расширенным типом.
- CS9320: Первый операнд перегруженного оператора сдвига должен иметь тот же тип, что и расширенный тип.
- CS9321: блок расширения, расширяющий статический класс, не может содержать определяемые пользователем операторы.
-
CS9322: Нельзя объявить оператор экземпляра для структуры, если параметр приемника блока расширения не является параметром типа '
ref'. - CS9323: не удается объявить оператор расширения экземпляра для типа, который не известен как структуру и не известен как класс.
-
CS9326: '
name': имена членов расширения не могут совпадать с их расширенным типом. - CS9329: этот блок расширения сталкивается с другим блоком расширения. Они приводят к конфликтующим именам типов на основе контента в метаданных.
- CS9339: разрешение расширения неоднозначно между следующими элементами.
Распространенные ошибки в объявлениях расширения
-
CS1102: модификатор параметров '
out' нельзя использовать с 'this'. - CS1103: первый параметр метода расширения не может быть типом указателя.
- CS1106: методы расширения должны быть определены в не универсальном статическом классе.
- CS1109: методы расширения должны быть определены на статических классах верхнего уровня, "name" является вложенным классом.
- CS1113: метод расширения, определенный для типа значения, нельзя использовать для создания делегатов.
- CS1743: не удается указать значение по умолчанию для параметра "этот".
- CS9283: расширения должны быть объявлены в верхнем уровне, не универсальном, статичном классе.
- CS9284: параметр приемника расширения не может иметь значение по умолчанию.
- CS9285: контейнер расширения может иметь только один параметр приемника.
Компилятор выдает эти ошибки при нарушении правил, которые применяются ко всем объявлениям членов расширения независимо от выбранного синтаксиса. Дополнительные сведения см. в разделе "Методы расширения".
Чтобы правильно объявить члены расширения, соблюдайте следующие требования:
- Объявите содержащий тип как не универсальный
staticкласс или структуру (CS1106, CS9283). - Объявите содержащий тип на верхнем уровне, а не вложенный в другой тип (CS1109, CS9283).
- Не преобразуйте методы расширения для типов значений в делегаты (CS1113). Вместо этого создайте обычный метод.
- Не используйте
outмодификатор параметров для параметра приемника (CS1102). - Не предоставляйте значения по умолчанию для параметра приемника (CS1743, CS9284).
- Не расширяйте типы указателей (CS1103). Параметр,
thisк который применяется модификатор, не может быть типом указателя. - Объявляйте только один параметр приемника для каждого контейнера расширения (CS9285).
Ошибки, связанные с декларациями блоков расширений
- CS9281: объявления расширений могут не иметь имени.
- CS9282: объявления расширения могут включать только методы или свойства.
- CS9287: параметр приемника не может иметь то же имя, что и параметр типа контейнера расширения.
- CS9288: параметр, локальная переменная или локальная функция не могут иметь то же имя, что и параметр типа контейнера расширения.
- CS9289: параметр типа члена имеет то же имя, что и параметр типа контейнера расширения.
- CS9290: параметр, локальная переменная или локальная функция не могут иметь то же имя, что и параметр расширения.
-
CS9291: '
value': имя параметра, созданное автоматически, конфликтует с именем параметра расширения. - CS9292: параметр типа имеет то же имя, что и параметр расширения.
- CS9293: не удается использовать параметр расширения в этом контексте.
-
CS9294: '
value': имя автоматически созданного параметра конфликтует с именем параметра типа расширения. - CS9295: расширенный тип должен ссылаться на все параметры типа, объявленные расширением, но параметр типа не ссылается.
-
CS9300: параметр приемника "
ref" блока расширения должен быть типом значения или универсальным типом, ограниченным структурой. -
CS9301: Параметр приемника '
in' или 'ref readonly' расширения должен быть конкретным (не универсальным) типом значения. - CS9302: новый защищенный элемент, указанный в блоке расширения.
- CS9303: невозможно объявить члены экземпляра в блоке расширения с параметром неименованного приемника.
- CS9304: не удается объявить методы доступа только для инициализации в блоке расширения.
- CS9305: не удается использовать модификаторы в параметре неназванного приемника блока расширения.
- CS9306: Типы и псевдонимы не могут называться "extension".
- CS9309: синтаксис члена расширения запрещен во вложенной позиции в синтаксисе члена расширения.
-
CS9316: члены расширения не допускаются в качестве аргумента "
nameof". - CS9317: параметр унарного оператора должен быть расширенным типом.
- CS9318: тип параметра оператора ++ или -- должен быть расширенным типом.
- CS9319: один из параметров двоичного оператора должен быть расширенным типом.
- CS9320: Первый операнд перегруженного оператора сдвига должен иметь тот же тип, что и расширенный тип.
- CS9321: блок расширения, расширяющий статический класс, не может содержать определяемые пользователем операторы.
-
CS9322: не удается объявить оператор экземпляра для структуры, если принимающий параметр блока расширения не является параметром '
ref'. - CS9323: не удается объявить оператор расширения экземпляра для типа, который не известен как структуру и не известен как класс.
-
CS9326: '
name': имена членов расширения не могут совпадать с их расширенным типом. - CS9329: этот блок расширения сталкивается с другим блоком расширения. Они приводят к конфликтующим именам типов на основе контента в метаданных.
- CS9339: разрешение расширения неоднозначно между следующими элементами.
Эти ошибки относятся к блокам расширения, компоненту C# 14. Блоки расширения объявляются с помощью extension контекстного ключевого слова в статичном классе. Дополнительные сведения см. в разделе "Методы расширения".
Чтобы правильно объявить блоки расширения, соблюдайте следующие требования:
- Не включайте токен имени в объявление расширения (CS9281). Расширение объявляет только приемник.
- Не предоставляйте значения по умолчанию для параметра приемника (CS9284, описанные в распространенных ошибках).
- Не используйте ключевое
extensionслово для типов или псевдонимов (CS9306). Это контекстное ключевое слово только для блоков расширения.
Чтобы корректно объявить члены расширения в блоках расширений, следуйте этим требованиям в дополнение к общим правилам:
- Включите только методы или свойства в качестве членов расширения (CS9282). Другие типы членов не поддерживаются.
- Укажите имя параметра для получателя, содержащего члены расширения экземпляра (CS9303).
- Убедитесь, что имя параметра приемника уникально в блоке расширения и не конфликтует с параметрами типа (CS9287, CS9288, CS9289, CS9290, CS9291, CS9292, CS9294).
- Ссылка на все параметры типа, объявленные в расширении в расширенном типе (CS9295). Дополнительные параметры типа можно добавить для отдельных членов.
- Не вкладывайте блоки расширения в другие блоки расширения (CS9309).
-
refИспользуйте модификатор для параметра приемника только с типами значений или универсальными типами, ограниченными структурой (CS9300). - Используйте модификатор
inилиref readonlyна параметре приемника только с конкретными (не универсальными) типами значений (CS9301). - Не используйте модификаторы для неименованных параметров приемника (CS9305).
- Не объявляйте
protectedчлены в блоках расширений (CS9302). Члены расширения должны быть доступны в той области, где оно действует. - Не объявляйте
initтолько методы доступа в блоках расширений (CS9304). Вместо этого используйте обычные методы задания свойств. - Не используйте члены расширения в качестве аргументов для
nameofоператора (CS9316). - Выберите имена членов, отличающиеся от имени расширенного типа (CS9326).
- Убедитесь, что блоки расширений имеют уникальные имена типов на основе контента в метаданных (CS9329). Консолидируйте или различайте блоки расширений, чтобы избежать конфликтов.
- Разрешать неоднозначные вызовы члена расширения, предоставляя более конкретные сведения о типе или используя полные имена (CS9339).
Требования к оператору блока расширения
Блоки расширений поддерживают определяемые пользователем операторы с определенными требованиями:
- Унарные операторы должны иметь расширенный тип в качестве параметра (CS9317).
- Операторы инкремента (
++) и декремента (--) должны иметь расширенный тип как параметр (CS9318). - Двоичные операторы должны иметь по крайней мере один параметр, который является расширенным типом (CS9319).
- Операторы shift должны иметь расширенный тип в качестве первого операнда (CS9320).
- Не объявляйте определяемые пользователем операторы в блоках расширений, расширяющих статические классы (CS9321).
- При расширении структуры с помощью операторов экземпляра используйте
refмодификатор для параметра приемника (CS9322). - Не объявляйте операторы экземпляра для типов, которые не ограничены как структурой, так и классом (CS9323).
Ошибки, связанные с this методами расширения параметров
-
CS1100: метод имеет модификатор параметров "
this", который не относится к первому параметру -
CS1101: модификатор параметров '
ref' нельзя использовать с 'this'. - CS1105: методы расширения должны быть статическими.
- CS1110: не удается определить новое расширение, так как не удается найти требуемый тип ExtensionAttribute компилятора. Отсутствует ссылка на System.Core.dll?
-
CS1112: не используйте "ExtensionAttribute". Используйте ключевое слово '
this' вместо него.
Эти ошибки относятся к методам расширения, в которых получатель объявляется путем добавления this модификатора в первый параметр. Дополнительные сведения см. в разделе "Методы расширения".
Чтобы правильно объявить this методы расширения параметров, выполните следующие требования в дополнение к общим правилам:
- Добавьте модификатор
staticв метод (CS1105). - Примените модификатор параметров только к первому параметру
this(CS1100). - Не сочетайте
refмодификатор с модификаторомthis(CS1101). Чтобы использоватьref, преобразуйте его в блок расширения. - Добавьте ссылку в приложения .NET Framework на
System.Core.dll(CS1110). -
thisИспользуйте модификатор для первого параметра вместо непосредственного применения атрибута ExtensionAttribute (CS1112).