Enum.ToString () возвращает значение по умолчанию вместо указанного значения - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь написать игру и использую перечисление для хранения цветов краски.Перечисление продолжает возвращать значение по умолчанию вместо значения поля.Есть ли способ предотвратить это?

Это приложение 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 содержит оранжевый PaintBucket.Метка OrangeContent, содержит orange.ToString.Но это проявляется как Red, 0 вместо Orange, 22.Красный является значением по умолчанию для перечисления, а 0 является значением по умолчанию для целого числа.Есть ли способ вернуть значение полей вместо значения по умолчанию?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы явно отключаете установщик (set{}), поэтому новое значение никогда не будет установлено.Код конструктора this.Color = col; ничего не будет делать.

Вы можете определить свойство как

public PaintColor Color { get; }

, чтобы иметь свойство «только для конструктора».Вам нужно будет удалить фоновое поле («цвет»), так как оно не будет использоваться.

И для значения по умолчанию:

public PaintColor Color { get; } = PaintColor.Red;
0 голосов
/ 29 января 2019

Измените свои свойства, чтобы использовать вспомогательное поле:

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;
...