我在使用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)
第一和第三种颜色是对财产的引用; 第二个是对类型的引用.