我在使用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指令或汇编引用?)
我不明白为什么我不能在那里使用我的枚举。有人可以帮我解释一下吗?
答案 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的定义'错误。万一有人遇到同样的问题。