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

Posted

技术标签:

【中文标题】命名空间不能直接包含字段或方法等成员?【英文标题】:A namespace cannot directly contain members such as fields or methods? 【发布时间】:2012-02-21 19:22:53 【问题描述】:

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

但是,我收到错误消息“命名空间不能直接包含字段或方法等成员”。

看了一下,好像没问题?我希望第二双眼睛能提供帮助,因为我到处搜索,但找不到相关的解决方案!

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

    

【问题讨论】:

回滚了修复格式的编辑,因为缺少格式实际上是问题的一部分。如果 OP 的代码一开始就被正确格式化,他们可能已经注意到了这个问题 - 所以改变问题以假装它已经 格式化隐藏了一个重大问题。 Error "A namespace does not directly contain members such as fields or methods"的可能重复 【参考方案1】:

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

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

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

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

【讨论】:

我现在得到“名称 AppName 在当前上下文中不存在” 与 chkStartUp 相同? @user1224163:嗯,你有两个不同的类 Program 声明,这也无济于事......我们不知道 chkStartUp 是什么...... 已排序,我是个白痴(很明显)。感谢您的帮助,抱歉浪费您的时间! 在 Visual Studio 2012 中按“Ctrl-E 后跟 D”没有重新格式化,窗口底部的栏显示消息“组合键(Ctrl+E、Shift+D ) 不是命令。”您在哪个版本的 Visual Studio 中使用此命令? @MatthewNajmon:不是 Shift+D,只是 D。我当时可能用的是 VS2010,但我刚刚检查了 VS2012 和 VS2013,它是一样的。转到编辑/高级并查找格式文档以找到适合您的快捷键。【参考方案2】:

你有一个放错位置的括号和分号,应该是:

private void SetStartup()


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

    //..

【讨论】:

【参考方案3】:

在我的情况下,编译器在第 1 行的 Razor 视图中报告了此错误。代码如下:

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

我只是改变了使用顺序,问题就解决了。

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

我的同事也反映他们面临这个编译器错误,可以通过更改命名空间的顺序来解决。

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

【讨论】:

【参考方案4】:

格式化代码后,你会看到一个类之外还有代码。

【讨论】:

以上是关于命名空间不能直接包含字段或方法等成员?的主要内容,如果未能解决你的问题,请参考以下文章

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

错误:命名空间不能直接包含字段或方法等成员[重复]

我正在尝试统一编写枪支脚本,但它说命名空间不能直接包含字段或方法等成员[重复]

Assets\Footsteps.cs(5,20):错误 CS0116:命名空间不能直接包含字段或方法等成员 [重复]

命名空间不能直接包含 2D 无限运行器中的字段或方法等成员 [重复]

错误“命名空间不直接包含字段或方法等成员”