Почему ошибка компилятора CS0116 превыше всего?

#c#

#c#

Вопрос:

Я получаю ошибку компилятора CS0116 в коде:

 <%@ Page EnableEventValidation="false" ValidateRequest="false" Language="C#" AutoEventWireup="true"

CodeFile="../Default.aspx.cs" Inherits="x.Program" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<%@ Register Assembly="Validators" Namespace="Sample.Web.UI.Compatibility" TagPrefix="cc1" %>

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Title</title>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body class="mainbody"></body>
</html>
  

код скрипта в Default.aspx.cs (Пожалуйста, обратите внимание, что «этот случайный текст каким-то образом проигнорирован» игнорируется и синтаксическая ошибка не генерируется):

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//this random text somehow ignored (now commented)

namespace x
{
// To fix the error, you must
// enclose a method in a class:

 class Program // changed from Class Program
 {
 void Method2(string str)
  {
  Console.WriteLine(str)
  }
 }
}
  

Почему появляется ошибка компилятора CS0116? Почему другие вещи игнорируются (например, синтаксическая ошибка)? Обновление: Пожалуйста, обратите внимание, что если я удалю строку «этот случайный текст каким-то образом проигнорирован», ошибка все равно сохранится.

ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ: Решение 1. Очевидно, что лишняя строка должна быть удалена. 2. Инструменты-> Параметры-> Текстовый редактор-> Основные-> Специфичный для VB-> Был включен симпатичный список (переформатирование) кода, который вызвал автоматическую смену регистра («класс» на «Class»). Я не сразу это заметил. Большое вам спасибо. Теперь это работает как шарм. @Rob Levine и @Guffa Я могу принять только один ответ, но вы оба проделали отличную работу!

Комментарии:

1. Ваш вопрос содержит свой собственный ответ в нескольких местах (сообщение об ошибке, комментарий и косвенно ваше замечание о «как-то проигнорировано»). По этой причине это плохой вопрос, и в первую очередь из-за отсутствия сообщения об ошибке компилятора

2. Пожалуйста, обратите внимание, что если я удалю строку «этот случайный текст каким-то образом проигнорирован», ошибка все равно сохранится. Нет, для вас я повторю: эта строка НЕ имеет значения. Игнорируйте это, если хотите. Строка была добавлена намеренно, чтобы подчеркнуть тот факт, что синтаксическая ошибка каким-то образом игнорируется. В целом, мой вопрос не содержит собственного ответа. Так что это разумный вопрос.

3. Согласно вашим собственным комментариям к существующим ответам, код, который вы опубликовали выше, больше не актуален. Убедитесь, что вы применили оба предложения, а затем отредактируйте свой вопрос с помощью обновленного кода, предполагая, что ошибка все еще существует.

4. Кроме того, только потому, что удаление одной строки не устраняет ошибку, это не значит, что ее можно игнорировать. Это просто означает, что у вас в коде несколько ошибок.

5. вы пробовали и мой ответ, и ответ Гуффы одновременно ? Они оба вызывают одну и ту же проблему у компилятора. Они оба являются нераспознанным материалом (который выглядит как своего рода объявление) непосредственно в пространстве имен и не заключены в класс (или структуру). Любой из них вызовет ошибку, которую вы видите. Вы должны исправить их оба.

Ответ №1:

Измените Class на class .

C # чувствителен к регистру.

Поскольку компилятор не распознает Class ,
метод по-прежнему не относится к классу, и вы по-прежнему получаете ту же ошибку.

Комментарии:

1. @Marc Gravell: Поскольку класс добавлен для исправления этой конкретной ошибки, я думаю, что на самом деле главной проблемой является правописание.

2. @Pavel Nefyodov: Теперь вы должны получить эту ошибку только один раз, из случайного текста, который вы добавили, и больше не из класса. Вы также получаете ошибку из-за отсутствия точки с запятой в строке в методе. Вы не получаете синтаксическую ошибку из случайного текста, потому что он достаточно близок к реальному коду, чтобы ошибка CS0116 появлялась первой.

3. @Pavel — вы пробовали оба ответа Guffa и мой одновременно? Они оба порождают одну и ту же проблему — неожиданный материал (который выглядит для компилятора как своего рода объявление) непосредственно в пространстве имен.

Ответ №2:

Ошибка CS0116 появляется именно из-за вашей строки

 this random text somehow ignored
  

Это сообщение об ошибке сообщает вам, что такие элементы, как поля, методы, свойства и т.д., Не могут отображаться непосредственно внутри пространства имен — их необходимо заключить в класс или структуру. [Как указывает Марк в комментарии — несмотря на то, что эта строка появляется над объявлением пространства имен, она по-прежнему считается находящейся непосредственно внутри глобального пространства имен]

Другими словами — поскольку он видит эту проблему при компиляции, он не утруждает себя попытками разобраться в том, что у вас может быть в файле класса, и не выдает вам никаких сообщений типа синтаксической ошибки — на самом деле он говорит «этот файл абсолютно неправильный, и я даже не собираюсь пытаться разобраться в нем».

Комментарии:

1. стоит отметить (для OP), что это находится в корневом / глобальном пространстве имен — но что по-прежнему применяются те же правила. Это все еще пространство имен.

2. Спасибо за ваш быстрый ответ. Если я удалю строку «этот случайный текст каким-то образом проигнорирован», ошибка все равно сохранится. Итак, проблема не в этом.

3. Это потому, что у вас также есть проблема, которую отмечает Гуффа в своем ответе — вам нужно изменить заглавную букву в «Class» на «class». Что касается компилятора, то это одна и та же проблема: нераспознанный материал, который выглядит как своего рода объявление, которое находится непосредственно в пространстве имен, а не в классе (или структуре)