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

这为渲染:DebuggerDisplay - 输入括号

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

为什么区别?

编辑:我知道为什么不同。我的问题是,如何在不对颜色文本进行硬编码的情况下实现第二个结果。

+0

尝试'返回ColorA.ToString()+ “” + ColorB.ToString();'的差异可能是由于一个事实,即它是在基本类型调用toString,即在其基础实现中使用“Color”。 – 2011-03-08 22:17:33

试试这个:

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

第一种方法隐式调用的Color实例ToString,而第二个就是你返回一个字符串。

要编辑:我不确定,但我认为它是自动完成的。否则,查看ToKnownColor方法,它会返回一个枚举值KnownColor,您可以使用它来构建具有所需行为的颜色。但是,您应该意识到不会有任何可能的颜色的名称。

+0

对不起,我问了错误的问题,请看我的编辑。 – sventevit 2011-03-08 22:27:20

因为这是显示您的ToString()结果。

第一个调用Color.Red.ToString(),它给出'Color [Red]',然后Color.Black.ToString()。

在第一个实例中,正在调用Color类的ToString()方法(给出Color [ColorName]输出)。