C# 与左侧和右侧比较的枚举值被确定为不一致
我正在创建一个用C#编写的windows应用程序。我创建了一个类C# 与左侧和右侧比较的枚举值被确定为不一致,c#,winforms,boolean,C#,Winforms,Boolean,我正在创建一个用C#编写的windows应用程序。我创建了一个类调色板,它定义了一种枚举类型的属性:方向{up,down,right,left}。在另一个类型为Form1的类中,我创建了palete的p实例 以下是一个简化版本: namespace WindowsFormsApplication1 { public class Palette { public Direction _direction { set { thi
调色板
,它定义了一种枚举类型的属性:方向{up,down,right,left}
。在另一个类型为Form1
的类中,我创建了palete
的p
实例
以下是一个简化版本:
namespace WindowsFormsApplication1
{
public class Palette
{
public Direction _direction
{
set { this._direction = value; }
get { return this._direction; }
}
}
public partial class Form1 : Form
{
private Palette p;
public enum Direction
{
Left, Right, Up, Down
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
p = new Palette { _direction = Direction.Up };
}
}
那么我想,p.direction也应该是枚举类型,不是吗
我的软件不这么认为,因为我用它来比较
p、 方向!=方向,向上
它认为左边的类型是调色板。正确的类型是enum
我怎么做 代码未按预期编译的原因是您已将枚举方向
声明为a,嵌套在外部类型Form1
中,而引用类型调色板
不是这样嵌套的。嵌套类型是在类或结构中定义的类型。当由该外部类型中的代码引用时,可以直接使用其名称。也就是说,在Form1
中,只需执行Direction.Up
即可引用枚举。但在包含类型之外,必须使用嵌套类型的全名,即Form1.Direction
因此,要解决您的问题,您可以:
将Direction
移动到Form1
之外,使其成为WindowsFormsApplication1
命名空间中的顶级类型
如果要以多种不同形式使用调色板
,建议使用此选项
将调色板
和方向
都嵌套在表单1
中
如果调色板
仅在表单1
中使用,或者需要访问表单1
的私有或受保护成员,则建议使用此选项
在调色板中
使用方向的全名
:
public Form1.Direction _direction { get; set; }
虽然这将编译,但不建议这样做,因为这样做既笨拙又不一致
顺便说一句,代码中有一个不相关的问题,即\u direction
属性具有无限递归。您应该将其修改为属性,或者使手动创建的备份字段的名称与属性的名称不同
因此,代码的固定版本可能如下所示:
public class Palette
{
Direction _direction;
public Direction Direction
{
set { this._direction = value; }
get { return this._direction; }
}
}
public enum Direction
{
Left, Right, Up, Down
}
public partial class Form1 : Form
{
private Palette p;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
p = new Palette { Direction = Direction.Up };
}
}
由于您的完整代码显然已编译,如果要将其移出窗体1
,则可能会有其他类型的WindowsFormsApplication1.Direction
,其名称与嵌套的Direction
类型的名称冲突。如果是这样,并且您希望保持调色板
在表单
之外,您的选项是:
如果它们实际上是重复的,只需删除内部嵌套类型即可
如果它们不是重复的,请将方向
枚举重命名为其他名称,例如方向类型
你能把有问题的代码贴出来吗?我很难理解到底是什么问题。请加上标点符号。我不会费劲去读这个问题。我真的很想发布我的代码。但是网站不允许我。“我真的很想发布我的代码”请这样做。你应该能把课文正确地放在问题中。每行缩进4个空格,使标记引擎将其识别为代码块。@renesmith-代码和错误消息必须作为文本而不是图像包含在问题中。看看原因。此外,您可能希望学习并阅读有关如何提出可能得到回答的问题的提示。其实是事实 我在表格1和表格2中定义了方向-那将是你的错误。您只需要在一个地方定义它。顺便说一句,你原来的问题没有说明这一点。将来,当你问问题时,请尽量加入一个能证明你的问题的例子。在这种情况下,您的问题没有显示方向的两个定义。哦,但是为什么在两个类中定义它是错误的?@renesmith-因为c#是而不是。两种枚举类型WindowsFormsApplication1.palete.Direction
和WindowsFormsApplication1.Form1.Direction
的名称不同,因此它们是不同的类型。它们的内容相同这一事实与此无关。嵌套类型和非嵌套类型不能编译吗?即使它们都是枚举类型?如果我想比较,我需要确保它们是相同的枚举类型,如果我想判断它们是否相同,对吗?