命名空间不能直接包含字段或方法等成员?
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:命名空间不能直接包含字段或方法等成员 [重复]