2013-05-22 1 views
1

디버거 프록시 클래스에서 [DebuggerDisplay ("{OneLineAddress}")]를 사용하면 작동하지 않는 것 같습니다. 내가 뭘 잘못하고 있니? 또는 원래 클래스에 코드를 추가하지 않고이 문제를 해결할 수 있습니까?DebuggerTypeProxy 클래스의 DebuggerDisplay 특성

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

답변

0

DebuggerDisplay 속성은 프록시가 아닌 클래스에서 사용해야합니다. 당신이 달성하려고으로, 당신은 단지 (AddressProxy없이) 클래스에 DebuggerDisplayAttribute를 추가 할 수 있습니다, 같은 효과를 달성하기 : 거리, 도시와 국가에서 nq이 숙소에 따옴표를 제거

[DebuggerDisplay("{Number} {Street,nq} {City,nq} {State,nq} {Zip}")] 
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; 
    } 
} 

텍스트입니다.

+0

그래,하지만 실제로 원하는 것은 DebuggerDisplay의 Proxy 클래스에서 일부 속성을 읽는 것입니다. – playerone

0

[DebuggerDisplay("{OneLineAddress}")]은 특정 클래스 인스턴스에서만 작동합니다. 샘플 코드에서 결과를 보려면 AddressProxy 클래스의 인스턴스를 만들어야합니다.

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

또는를 사용할 수 Address 클래스의 "한 줄에 주소"를 참조하십시오 :

public override string ToString() 
{ 
    return string.Format("{0} {1} {2} {3} {4}", Number, Street, City, State, Zip); 
} 

내가 개인적으로는 ToString() 방법을 권장이 표시 목록에 사용하고 배열 때문에 올바른 상태의 한 줄 주소 ...

DebuggerTypeProxy은 디버거에서 사용되므로 목록에 사용해야합니다. 현재 인스턴스를 확장 한 후 예제보기 http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggertypeproxyattribute%28v=vs.110%29.aspx

관련 문제