C#Typecast一个结构的枚举

Pau*_*ker 2 c# enums struct

我正在使用C#,我必须操纵屏幕上的对象.我设置了一个结构来保存坐标,然后我设置一个枚举来限制可以移动的方向的数量.

private enum Direction
{
    UpperLeft = new Coord(-1, -1), 
    UpperCenter = new Coord(0, -1), 
    UpperRight = new Coord(1, -1),
    Left = new Coord(-1, 0), 
    Right = new Coord(1, 0),
    LowerLeft = new Coord(-1, 1), 
    LowerCenter = new Coord(0, 1),
    LowerRight = new Coord(1, 1)
};

private struct Coord
{
    public int row { get; private set; }
    public int col { get; private set; }
    public Coord(int r, int c) : this()
    {
        row = r;
        col = c;
    }

    public static Coord operator +(Coord a, Coord b)
    {
        return new Coord(a.row + b.row, a.col + b.col);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我的目标是让我在屏幕上的对象基于指定的枚举移动.

所以我想把它假装成像这样或类似的东西:

public class ThingThatMovesToTheLeft
{
    Direction dir = Direction.Left;
    Coord pos = new Coord(0,0);
    public void Move()
    {
        this.pos = this.dir + this.pos;
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我的问题是如何将我的枚举强制转换回我的结构,以便以这种方式使用它?我似乎无法将其强制转换回结构.(此外,VisualStudio让我可以在没有抱怨的情况下将枚举分配给那些Coord结构,所以我认为可以将结构分配给枚举,这是可以接受的做法还是应该这样做?)

Moe*_*eri 5

如果希望复杂对象静态可用,则需要使用公共静态变量,如下所示:

public class Person
{
    public string FirstName {get; set; }
    public string LastName {get; set; }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }
}

public static class People
{
    public static Person Jack= new Person("Jack", "Andersson");
}
Run Code Online (Sandbox Code Playgroud)

这是因为Enums是特殊结构,在switch case结构或管道运算符中具有特殊行为.

编辑:我错了,枚举只是原始类型的语法糖.

我不是专家,所以我不是说我百分之百确定没有其他办法,但我会让你的指示类如下:

private static class Directions
{
    private static readonly Coord UpperLeft = new Coord(-1, -1);
    private static readonly Coord UpperCenter = new Coord(0, -1);
    private static readonly Coord UpperRight = new Coord(1, -1),
    private static readonly Coord Left = new Coord(-1, 0); 
    private static readonly Coord Right = new Coord(1, 0);
    private static readonly Coord LowerLeft = new Coord(-1, 1);
    private static readonly Coord LowerCenter = new Coord(0, 1);
    private static readonly Coord LowerRight = new Coord(1, 1);
};
Run Code Online (Sandbox Code Playgroud)