为什么我的C#枚举不起作用?

时间:2011-12-23 20:15:47

标签: c# casting enums

我在使用C#

中的枚举时遇到问题

我在这里有一个枚举:

namespace Project.Shared
{
    public enum CostType
    {
        Dollars,
        Percent
    }
}

我有一个试图在这里使用枚举的对象:

using Project.Shared;
namespace Project.Shared.FooNamespace
{
    public class Foo
    {
        public int CostType { get; set; }

        public Foo()
        {

            CostType = (int)CostType.Dollars; // <--- error syntax highlighting on 'Dollars'
        }
    }
}

这会导致错误:

  

'int'不包含'Dollars'的定义,并且没有扩展方法'Dollars'可以找到接受类型'int'的第一个参数(你是否缺少using指令或汇编引用?)

我不明白为什么我不能在那里使用我的枚举。有人可以帮我解释一下吗?

6 个答案:

答案 0 :(得分:17)

因为您的班级Foo具有此定义 - public int CostType { get; set; } - 其本地范围超出您的enum

尝试使用其命名空间完全限定它:

CostType = (int)Project.Shared.CostType.Dollars;

答案 1 :(得分:12)

正如其他人所指出的,该属性比类型更“接近”,因此当解析简单名称时,该属性总是获胜。

有关这种情况的一个有趣的问题是如果你已经创建了CostType类型而不是int类型的属性,它就会起作用。

原因是因为C#有一个特殊规则,通常称为“颜色”规则。 (因为这是最常出现的情况:名为Color的类型和名为Color of Color的属性。)

如果一个简单的名称既可以表示类型的属性或字段具有该类型,那么C#允许您通过该名称访问静态成员通过属性键入实例成员。这允许您执行以下操作:

Color = Color.Red;
description = Color.ToString();

第一和第三种颜色是对财产的引用;第二个是对类型的引用。

答案 2 :(得分:1)

您有命名冲突。您将属性CostType命名为与枚举名称相同的属性。这样C#就假设CostType方法中的Foo()个引用都引用了属性而不是枚举。

你可以试试这个:

CostType = (int)Project.Shared.CostType.Dollars;

答案 3 :(得分:1)

问题在于CostType = (int)CostType.Dollars; CostType的两个出现都是指变量。变量CostType没有名为Dollars的属性。包括命名空间以引用类型Project.Shared.CostType以显式引用类型,而不是变量。

答案 4 :(得分:1)

将其更改为此应该可以正常工作

public enum CostType
{ 
    Dollars,
    Percent 
} 

public class Foo
{         
    public int CostTypes { get; set; }
    public Foo()
    { 
        CostTypes = (int)CostType.Dollars;
        // <--- error syntax highlighting on 'Dollars'
    }
} 

我不会将我的auto属性命名为与我的枚举CostType相同的名称我测试了这个以及我发布的内容确实编译和工作

答案 5 :(得分:0)

我通过重新启动Visual Studio解决了我的问题:'ENUM不包含VALUE的定义'错误。万一有人遇到同样的问题。