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

约翰·史蒂文森

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

这是一个 C# .NET Forms 应用程序,适用于 .NET Framework 4.6.1。

这是我的代码:

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包含一个 orange PaintBucket标签OrangeContent,包含orange.ToString. 但它显示为Red, 0而不是Orange, 22红色是枚举的默认值,0 是整数的默认值。有没有办法返回字段的值而不是默认值?

汉斯·柯廷

您明确禁用了 setter ( set{}),因此它永远不会设置新值。构造函数代码this.Color = col;什么也不做。

您可以将属性定义为

public PaintColor Color { get; }

具有“仅限构造函数设置”的属性。您将需要删除后台字段(“颜色”),因为它不会被使用。

对于默认值:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Enum.ToString()不返回正确的枚举名称?

来自分类Dev

toString返回不同的值

来自分类Dev

返回toString中的值

来自分类Dev

toString返回不同的值

来自分类Dev

AutoMapper 映射到 Enum 默认值而不是在 null 时跳过

来自分类Dev

JList.getSelectedValue()。toString()返回空值?

来自分类Dev

默认冲突toString和覆盖toString

来自分类Dev

猫鼬返回默认值而不是null值

来自分类Dev

enum.toString()如何在后台运行?

来自分类Dev

具有完整名称的C#Enum.ToString()

来自分类Dev

小写Boolean.ToString()值

来自分类Dev

EditText getText toString返回“”

来自分类Dev

为什么console.log(obj)显示obj的结构而不是toString()的返回值

来自分类Dev

为什么使用enum.ToString框/ callvirt,而不是推送地址和调用?还有其他特殊情况吗?

来自分类Dev

指定Decimal.ToString()方法的默认格式

来自分类Dev

指定集合的默认值

来自分类Dev

指定集合的默认值

来自分类Dev

在LINQ中返回null而不是默认值

来自分类Dev

JSpinner返回默认值,而不是键入一个

来自分类Dev

如何从提供的值返回Enum对象

来自分类Dev

从子类中的 Enum 返回值

来自分类Dev

返回类实例C#的默认ToString()

来自分类Dev

将ENUM的值相加

来自分类Dev

获取ENUM值的方法

来自分类Dev

js函数中的toString返回undefined和0值

来自分类Dev

js函数中的toString返回undefined和0值

来自分类Dev

关于 Integer.toString(char) 的返回值

来自分类Dev

确定Enum值在C#中是否不是复合值

来自分类Dev

使用toString()方法返回对象