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

qua*_*els 7 c# enums casting

我在使用C#中的枚举时遇到问题

我在这里有一个枚举:

namespace Project.Shared
{
    public enum CostType
    {
        Dollars,
        Percent
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

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

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

Yuc*_*uck 17

因为你的类Foo有这个定义 - public int CostType { get; set; }- 它的局部范围比你的更大enum.

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

CostType = (int)Project.Shared.CostType.Dollars;
Run Code Online (Sandbox Code Playgroud)


Eri*_*ert 12

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

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

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

如果一个简单的名字可能意味着两种类型属性或字段使用该名称,这种类型的,那么C#允许您通过类型都访问静态成员,并通过属性实例成员.这允许您执行以下操作:

Color = Color.Red;
description = Color.ToString();
Run Code Online (Sandbox Code Playgroud)

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