Enum.ToString()返回默认值而不是指定值

时间:2019-01-29 15:16:24

标签: c# .net enums tostring

我正在尝试编写游戏,并且使用枚举来存储涂料的颜色。 枚举不断返回默认值,而不是字段的值。有办法防止这种情况吗?

这是用于.NET Framework 4.6.1的C#.NET Forms应用程序。

这是我的代码:

public enum PaintColor
{
    Red,
    Orange,
    Yellow,
    Green,
    Blue
}
class Form1 : Form
{

    private void Form1_Load(Object sender, EventArgs e)
    {
        PaintBucket orange = new PaintBucket()
        {
            Color = PaintColor.Orange,
            Amount = 22
        };
        Label OrangeContent = new Label
        {
            Text = (orange.ToString()),
            Width = 100,
            Height = 20,
            Top = 500,
            Left = 500
        };
        Controls.Add(OrangeContent);
    }

}

这是防御PaintBucket类:

public class PaintBucket
{
    public event EventHandler WriteToFile;
    PaintColor color = PaintColor.Red;
    int amount = 0;
    public PaintBucket()
    {
    }

    public PaintBucket(PaintColor col, int amnt)
    {
        this.Color = col;
        this.Amount = amnt;
    }
    public PaintColor Color
    {
        get => color;
        set{}
    }
    public int Amount
    {
        get => amount;
        set{}
    }
    protected virtual void OnWriteToFile(EventArgs e)
    {
        WriteToFile(this, e);
    }
    public override string ToString()
    {
         return (this.Color.ToString() + ", " + this.Amount.ToString());
    }
}

如上所示,字段orange包含橙色的PaintBucket。标签OrangeContent包含orange.ToString。但是它显示为Red, 0而不是Orange, 22。红色是枚举的默认值,0是整数的默认值。有没有一种方法可以返回字段的值而不是默认值?

2 个答案:

答案 0 :(得分:1)

更改属性以使用后备字段:

public PaintColor Color
{
    get => color;
    set => color = value;
}
public int Amount
{
    get => amount;
    set => amount = value;
}

或使用自动实现的属性:

public PaintColor Color { get; set; } = PaintColor.Red;

public int Amount { get; set; } = 0;

答案 1 :(得分:0)

您正在明确禁用设置器(set{}),因此将永远不会设置新值。构造函数代码this.Color = col;无效。

您可以将属性定义为

public PaintColor Color { get; }

具有“仅可构造构造函数”属性。您将需要删除背景字段(“颜色”),因为它不会被使用。

并使用默认值:

public PaintColor Color { get; } = PaintColor.Red;