C# DebuggerTypeProxy类上的DebuggerDisplay属性

C# DebuggerTypeProxy类上的DebuggerDisplay属性,c#,.net,debugging,debuggerdisplay,C#,.net,Debugging,Debuggerdisplay,在调试器代理类上使用[DebuggerDisplay(“{OneLineAddress}”)]时,它似乎不起作用。我做错什么了吗?或者在不向原始类添加代码的情况下以某种方式解决此问题 [DebuggerTypeProxy(typeof(AddressProxy))] class Address { public int Number { get; set; } public string Street { get; set; } public string City {

在调试器代理类上使用[DebuggerDisplay(“{OneLineAddress}”)]时,它似乎不起作用。我做错什么了吗?或者在不向原始类添加代码的情况下以某种方式解决此问题

[DebuggerTypeProxy(typeof(AddressProxy))]
class Address
{
    public int Number { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public int Zip { get; set; }

    public Address(int number, string street, string city, string state, int zip)
    {
        Number = number;
        Street = street;
        City = city;
        State = state;
        Zip = zip;
    }

    [DebuggerDisplay("{OneLineAddress}")] // doesn't seem to work on proxy
    private class AddressProxy
    {
        [DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)]
        private Address _internalAddress;

        public AddressProxy(Address internalAddress)
        {
            _internalAddress = internalAddress;
        }

        public string OneLineAddress
        {
            get { return _internalAddress.Number + " " + _internalAddress.Street + " " + _internalAddress.City + " " + _internalAddress.State + " " + _internalAddress.Zip; }
        }
    }
}

DebuggerDisplay属性应用于类,而不是代理。为了达到相同的效果,在尝试完成时,只需在类上添加DebuggerDisplayAttribute(不带AddressProxy):


街道、城市和州中的文本
nq
删除属性中的引号。

调试程序[DebuggerDisplay(“{OneLineAddress}”)]仅在特定类实例上工作。要在示例代码中查看结果,需要创建
AddressProxy
类的实例

要查看
address
类上的“单行地址”,可以使用

[DebuggerDisplay("{Number} {Street,nq} {City,nq} {State,nq} {Zip}")]
class Address { .... }
或:

我个人建议使用
ToString()
方法,因为在列表和数组中使用此方法可以显示正确的状态单行地址


应将
DebuggerTypeProxy
用于列表,因为它是在扩展当前实例后在调试器中使用的。示例查看

是的,但我真正想要的是从DebuggerDisplay的代理类中读取一些属性。
[DebuggerDisplay("{Number} {Street,nq} {City,nq} {State,nq} {Zip}")]
class Address { .... }
public override string ToString()
{
  return string.Format("{0} {1} {2} {3} {4}", Number, Street, City, State, Zip);
}