【发布时间】:2019-05-24 18:38:35
【问题描述】:
以下代码在一个简单的演示中运行,但在我的实际项目中无法编译。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string AgentName = "Test";
string SERVICE_NAME = "Agent";
ServiceController sc = new ServiceController(AgentName);
ServiceControllerStatus status = sc.Status;
Debug.WriteLine(String.Format("Service {0} {1}", SERVICE_NAME,
// compile error this next line:
Enum.GetName(typeof(ServiceControllerStatus), sc.Status)));
}
}
}
错误信息是:
命名空间中不存在类型或命名空间名称“GetName” 'UtilLibrary.Enum'
如果我将文件(在实际项目中)中的顶级命名空间从 UtilLibrary 更改为 UtilityLibrary 之类的其他名称,它编译得很好。似乎与GetName() 有冲突,但没有,搜索中没有出现任何内容。
那么我怎样才能留在同一个命名空间中并修复编译错误呢?
ps 我是 C# 新手。此外,如果添加点来更改命名空间,如UtilLibrary.General,仍然无法修复错误。
【问题讨论】:
-
尝试完全解析
System.Enum的命名空间:System.Enum.GetName(typeof(ServiceControllerStatus), sc.Status)。如果有人做了一些奇怪的事情来破坏它,请转到global::System.Enum(...。这应该解决它的哈希值。 -
System.Enum.GetName()确实修复了错误!所以这意味着存在名称冲突?不知道为什么它没有出现在搜索中。 -
@EdPlunkett 这是类型,冲突(不是类)。我更新了评论。
-
为命名空间选择好的名称,您希望避免使用已被关键字和常见 .NET 类使用的名称。像“枚举”。找到好的建议here。
-
正如 Hans 所建议的,如果库在您的控制范围内,
Enum对于类名来说是个坏主意,无论命名空间如何。在扩展方法之前,你可以说UtilLibrary.Enum或其他什么,但现在它更粗略了。EnumExt是人们用于此类内容的一种命名约定。
标签: c# namespaces console-application