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 ответа
Первый метод неявно вызывает ToString
на Color
экземпляры, в то время как второй только вы возвращаете строку.
К вашему редактированию: я не уверен, но я думаю, что это делается автоматически. В противном случае, посмотрите в ToKnownColor
метод, он возвращает KnownColor
перечисление, которое вы можете использовать для создания цвета с желаемым поведением. Тем не менее, вы должны знать о том, что не будет названия для каждого возможного цвета.
Потому что это показывает ваш результат ToString().
Первый вызывает Color.Red.ToString(), который дает 'Color [Red]', затем Color.Black.ToString().
В первом случае вызывается метод ToString() класса Color (с выводом Color [ColorName]).