【问题标题】:The type or namespace name 'GetName' does not exist in the namespace命名空间中不存在类型或命名空间名称“GetName”
【发布时间】: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


【解决方案1】:

尽管这不是最佳做法,但您始终可以指定别名来解决命名问题

using SysEnum = System.Enum;
using LibEnum = Some.Custom.Library.Enum;

//Usage
SysEnum.GetName(typeof(ServiceControllerStatus), sc.Status)));
LibEnum.WhateverMethodIsImplementedHere();

请记住,只要是您的代码,通常最好修改命名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2018-05-09
    • 2022-01-11
    • 2021-10-15
    • 2018-06-14
    相关资源
    最近更新 更多