DebuggerDisplay - введите в квадратных скобках

class A
{
    public Color ColorA { get; set; }
    public Color ColorB { get; set; }

    public A(Color colorA, Color colorB)
    {
        ColorA = colorA;
        ColorB = colorB;
    }

    public override string ToString()
    {
        return ColorA + " " + ColorB;
    }
}

Это выглядит как:


И это:

class A
{
    public Color ColorA { get; set; }
    public Color ColorB { get; set; }

    public A(Color colorA, Color colorB)
    {
        ColorA = colorA;
        ColorB = colorB;
    }

    public override string ToString()
    {
        return "Red" + " " + "Black";
    }
}

отображается как:

Почему разница?

Редактировать: я знаю, почему разница. У меня вопрос, как добиться второго результата без жесткого кодирования текста цвета.

4 ответа

Решение

Попробуй это:

return ColorA.Name + " " + ColorB.Name;

Первый метод неявно вызывает ToString на Color экземпляры, в то время как второй только вы возвращаете строку.

К вашему редактированию: я не уверен, но я думаю, что это делается автоматически. В противном случае, посмотрите в ToKnownColor метод, он возвращает KnownColor перечисление, которое вы можете использовать для создания цвета с желаемым поведением. Тем не менее, вы должны знать о том, что не будет названия для каждого возможного цвета.

Потому что это показывает ваш результат ToString().

Первый вызывает Color.Red.ToString(), который дает 'Color [Red]', затем Color.Black.ToString().

В первом случае вызывается метод ToString() класса Color (с выводом Color [ColorName]).

Другие вопросы по тегам