C#报错CS0246:已存在对应类时仍提示找不到命名空间Objects
问题根源
- Objects文件中的
Objects子命名空间被注释掉了,并没有实际生成ConsoleTagGame.Objects命名空间,所以调用Objects.Player时会找不到对应命名空间。 - 你删除
Objects.前缀后仍报错的核心原因:终端编译时只传入了单个cs文件,C#编译器没有加载到Objects.cs里的Player类定义。 - 额外隐藏问题:Player类的属性默认是
private访问级别,外部类无法访问,同时Main方法中调用的player1.name大小写和属性名Name不匹配,后续也会触发报错。
解决步骤
1. 修正命名空间
二选一即可:
- 方案1(保留Objects子命名空间):把Objects文件里命名空间的注释去掉,改为
namespace ConsoleTagGame.Objects,然后在initialize类文件顶部加一行using ConsoleTagGame.Objects; - 方案2(共用同级命名空间):两个文件都保留
ConsoleTagGame命名空间,直接删除initialize代码里的Objects.前缀。
2. 修正属性访问权限和大小写
修改Objects.cs里的属性定义,加上public修饰符:
// 修改后的属性定义 public string Name { get; set; } public bool IsAlive { get; set; } public bool IsIt { get; set; }
同时把initialize的Main方法里的player1.name改为player1.Name,匹配属性大小写。
3. 编译时传入所有源文件
终端调用csc编译时,要把两个cs文件都作为参数传入,假设两个文件分别叫initialize.cs和Objects.cs,编译命令为:csc initialize.cs Objects.cs
编译生成的exe即可正常运行。
内容的提问来源于stack exchange,提问作者E3bones
相关产品推荐
相关产品推荐

