【问题标题】:Why can't my enum be found in another class?为什么我的枚举不能在另一个类中找到?
【发布时间】:2013-02-11 10:01:31
【问题描述】:

当尝试从另一个类访问名为 Monsters 的 enum 时,Visual Studio 给我错误“找不到类型或命名空间名称‘Monsters’(您是否缺少 using 指令或程序集引用? )”,尽管在我的班级中有关联的 using

这是我的枚举代码:

namespace Zadify.Enums
{
    public enum Monsters
    {
        Zombie,
        Skeleton,
        Mummy,
        Robot,
        Demon
    }
}

这是我需要访问的班级:

using System;
using System.Xml.Serialization;
using Zadify.Enums;

namespace Zadify
{
    [Serializable]
    public abstract class Goal
    {
        //Properties, Other methods

        public void AssignMonsterData(int rank)
        {
            var random = new Random();

            var monsterTypeValues = Enum.GetValues(typeof (Monsters)); //Gives the error on "Monsters" here
            var monster = (Monsters) monsterTypeValues.GetValue(random.Next(rank - 1)); //Also gives the error on this "Monsters"

            //Do other stuff
        }

我后来在monster 上做了一个switch,每次我使用Monsters.ZombieMonsters.Skeleton 等时似乎都很好。我在Zadify.Enums 中还有其他几个enums工作正常,事实上,我在这个类中使用了完全相同的代码。

到目前为止,我已经尝试更改枚举的namespace 并将using 添加到新的namespace,将Monsters 复制到另一个文件中,清理项目并重建一百次。我正在使用 Visual Studio 2010 并为 Android 应用编写 Mono,尽管这些类中没有 Android 代码。

在我构建之前,Visual Studio 似乎没有问题。事先,intellisense 工作正常,如果我取出 using Zadify.Enums; 行,它会询问这是否是我要引用的内容,然后 ctrl+单击它会将我带到正确的文件。

如果我应该提供任何其他代码,请告诉我。

【问题讨论】:

  • Zadify.Enums.Monsters 是否定义在与Zadify.Goal 不同的程序集(阅读:Visual Studio 项目)中?
  • 你尝试过使用 Zadify.Enums.Monsters 吗?是否有任何 dll 引用问题?顺便说一句,这段代码对我来说编译得很好。
  • 他们在同一个项目中。 :/ 我没有引用任何外部 dll。 Monsters.cs 位于名为 Enums 的文件夹中,而 Goal.cs 仅位于根目录中。我在本课程中使用的所有其他枚举也在 Enums 中。
  • 哦,@allen,对不起,我没有回答你的第一个问题。是的,我尝试使用Zadify.Enums.Monsters。它给出了同样的错误。
  • 我没有提到的另一件事(但现在已经更新了我的问题) - 在我构建之前,Visual Studio 似乎没有问题。事先,智能感知工作正常,如果我取出 using Zadify.Enums; 行,它会询问这是否是我要引用的内容,然后 ctrl+单击它会将我带到正确的文件。

标签: c# visual-studio enums xamarin.android


【解决方案1】:

@ZAD-Man,检查您的客户资料设置。

  1. 右键单击项目
  2. 您应该在“应用程序”选项卡上
  3. 查看 Target 框架下拉菜单

是否设置为.Net Framework xx Client Profile?在 Visual Studio 将我的项目默认设置为该项目之前,我遇到了奇怪的问题...尝试将其更改为 .Net Framework 4 而不使用客户端配置文件部分,看看它是否有效。

您正在寻找的屏幕与此类似:

【讨论】:

  • 啊,是的,实际上,我曾想过 Target Framework 会以某种方式关闭,但这是一个 MonoDroid 项目让事情变得有点棘手......它有自己的配置文件(显然与 Silverlight 非常相似),尽管我看到的唯一出现问题的方法是尝试引用 4.0 dll 和类似的东西时。无论如何,它让我可以选择要定位的最低 Android 版本,但我现在无法真正改变它,我怀疑它是否与它有关。
  • 感谢您的帮助!事实证明我只是犯了一个愚蠢的错误,实际上我以前犯过一个错误,但我想没有从中吸取教训。 :P 看我的回答。
【解决方案2】:

它可能发生的原因是该类没有被添加到类库中。还要检查引用是否添加了这个类库。

【讨论】:

  • 我该如何检查这两件事?
  • 在解决方案资源管理器中,您将在项目节点下找到参考节点。在参考中,您将能够找到其中引用的类库。
  • 嗯,这都是我自己的代码,在同一个项目中,所以没有什么可以参考的。
  • 多次看到 Intellisense 似乎工作正常但构建失败。由于您的 Monsters.cs 在 ENUMS 文件夹中,请您添加对这个类库文件夹的引用并尝试构建它。
  • @sneakthief 也许这是一个类似的问题? [链接]stackoverflow.com/questions/155105/…
【解决方案3】:

原来我只是犯了一个愚蠢的错误。我在另一个项目中添加了Goal.cs 作为链接,但忘记链接我的枚举。另一个没有问题的唯一原因是因为它被Monsters 抓住而没有看其他人。由于它是一个链接,点击异常只是将我带到真正的Goal.cs,所以我认为问题出在那个项目上,但如果我仔细观察,我会发现它是另一个项目。

【讨论】:

    【解决方案4】:

    我有这个。问题是引用项目不小心将其目标更改为 x86,而枚举项目目标仍然是 Any CPU。

    【讨论】:

    • 这绝对是值得检查的东西。就我而言,这只是因为完全没有参考,但我认为大多数人会因为像你这样的问题而遇到这个问题,而不是我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多