【发布时间】:2012-01-25 02:43:37
【问题描述】:
C# 允许您为枚举元素赋值,例如
public enum Animals
{
Dog = 0, Cat = 1,
}
你也可以像这样从他们那里投射。
public void demo()
{
int dog = (int)Animals.Dog;
Animals cat = (Animals)(dog++);
}
但是 c# 也可以让你做这样的事情
public enum Animals
{
Dog = Vector2.One, Cat = Vector2.Zero,
}
但是,您无法通过强制转换使 Vector2 重新进出。比如
Vector2 dog = (Vector2)Animals.Dog; //this fails
这个问题可以解决吗? *注意Vector2 是一个类对象,Vector2.One 和Vector2.Zero 是此类对象的静态声明。这意味着 Dog 被分配给内存引用。
【问题讨论】:
-
此代码无法编译 -
Vector2必须可转换为 int(或者,如果您指定了任何其他允许的仅整数类型的枚举基本类型) -
Vector2 不是一个类,它是一个结构和一个值类型(假设您使用的是 XNA Vector2 而不是您自己的实现)。
-
@BrokenGlass 嗯,我的 Kreskin 帽子 (amazingkreskin.com) 也在清洁工那里! ;-)