在类构造函数中初始化枚举的正确方法

OVE*_*ONE 1 c# enums initialization

我可能以错误的方式看待枚举,但想确保我在如何使用它们方面拥有正确的理论。

假设我们有一个名为 Colour 的枚举。

enum Colour { Red, Green, Blue };
Run Code Online (Sandbox Code Playgroud)

红、绿、蓝用 0-255 的值表示。我正在尝试在类形状内初始化此枚举,但我不太确定如何进行。

public class Shape
{

    Colour colour;

    public Shape(Colour c)
    {
         //Some attempts at initialization.


         //Treating It like an object
         this.colour = 
            c{
                255,255,255
            };

         //Again
         this.colour.Red = c.Red
         this.colour.Blue = c.Blue
         this.colour.Green = c.Green

         Colour.red = c.red?


         }
    }
}
Run Code Online (Sandbox Code Playgroud)

我对枚举的看法可能还很遥远。有人能给我一些指点吗?

Cᴏʀ*_*ᴏʀʏ 5

在这种情况下,您可能希望使用 Colorstruct而不是枚举。在 C# 中,枚举是单值构造,但具有三个值(红色、绿色和蓝色)。我可能会这样做:

public struct Colour 
{
    private byte red;
    private byte green;
    private byte blue;

    public Colour(byte r, byte g, byte b) 
    {
        this.red = r;
        this.green = g;
        this.blue = b;
    }
}

public class Shape
{
    public Colour Colour { get; private set; }

    public Shape(Colour c)
    {
        this.Colour = c;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后当您创建形状对象时:

var shape = new Shape(new Colour(203, 211, 48));
Run Code Online (Sandbox Code Playgroud)

编辑:正如克里斯在评论中指出的那样,您可以简单地使用System.Drawing.Color框架提供的结构。上面的例子可以简化为:

using System.Drawing;

public class Shape
{
    public Color Colour { get; private set; }

    public Shape(Color c)
    {
        this.Colour = c;
    }
}

var shape = new Shape(Color.FromArgb(203, 211, 48));
Run Code Online (Sandbox Code Playgroud)