Current state
Having two classes:
[DebuggerDisplay(@"One = {One}, two = {Two}")]
public class A
{
    public int One { get; set; }
    public B Two { get; set; }
}
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
    public int Three { get; set; }
}
Using them:
var a = new A {One = 5, Two = new B {Three = 10}};
Inside the debugger, the tool tip value that is displayed at a is
One = 5, two = {DebuggerDisplayTest.B}
Goal
What I would want is something like
One = 5, two = 'Three = 10'
I know this could be achieved by overriding the ToString() method of class B. This just feels not right, since I'm writing code in my application for debugging only.
I also know that using a string similar to
[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
would work, too. This also does not feel right to me, since it would require that class A has knowledge of class B.
I would like to have more of a way to "inject" the value of DebuggerDisplay of type B to the instance of that type in class A.
Question
Is it somehow possible to access the DebuggerDisplay attribute of a member inside the DebuggerDisplay attribute of a "has-a" composited class?
Update
Probably, my requirement is not possible as per this SO answer. Maybe a good solution would be to override ToString in class B and do some if..else and use the Debugger.IsAttached property to behave different only inside the debugger.
Something like:
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
    public int Three { get; set; }
    public override string ToString()
    {
        if (Debugger.IsAttached)
        {
            return string.Format(@"Three = {0}", Three);
        }
        else
        {
            return base.ToString();
        }
    }
}
 
     
     
    
 
    