DebuggerDisplay - введите в квадратных скобках - PullRequest
1 голос
/ 09 марта 2011
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;
    }
}

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

enter image description here


И это:

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";
    }
}

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

enter image description here

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

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

Ответы [ 4 ]

3 голосов
/ 09 марта 2011

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

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

2 голосов
/ 09 марта 2011

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

return ColorA.Name + " " + ColorB.Name;
0 голосов
/ 09 марта 2011

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

0 голосов
/ 09 марта 2011

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

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

...