• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[ASP.NET2.0MVPHacksandTips]TuningObjectsforDebugging

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用 DebuggerBrowsable 特性可以设置调式运行时属性在Watch窗口中的可视状态。
DebuggerBrowsable 使用 DebuggerBrowsableState 枚举来初始化,它有三个值:

  • Collapsed 默认行为,显示元素
  • Never  不在Debug窗口中显示元素
  • RootHidden 隐藏父元素,直接显示子元素
 Person
    {
        private string _lastName = string.Empty;
        
private string _firstName = string.Empty;
        
private int _age = 0;
        
private List<Person> _children = new List<Person>();
        
private List<string> _pets = new List<string>();
        
private List<string> _cars = new List<string>();

        
public string LastName
        {
            
get { return _lastName; }
            
set { _lastName = value; }
        }

        
public string FirstName
        {
            
get { return _firstName; }
            
set { _firstName = value; }
        }

        
public int Age
        {
            
get { return _age; }
            
set { _age = value; }
        }

        [DebuggerBrowsable(DebuggerBrowsableState.Collapsed)]
        
public List<Person> Children
        {
            
get{return _children;}
        }

        [DebuggerBrowsable(DebuggerBrowsableState.Never)]
        
public List<string> Pets
        {
            
get { return _pets; }
        }

        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
        
public List<string> Cars
        {
            
get { return _cars; }
        }

        
public Person()
        {
        }

        
public Person(string lastName, string firstName, int age)
        {
            _lastName 
= lastName;
            _firstName 
= firstName;
            _age 
= age;
        }
    }

 

 

通过Type Proxy简化对象查看

使用 [DebuggerTypeProxy(typeof(XXXProxy))] 特性标记要简化查看的类,XXXProxy 是新创建的类,目的只是为了定义要在Watch窗口显示的属性

 PersonProxy
    {
        private Person _person;

        
public PersonProxy(Person person)
        {
            _person 
= person;
        }

        
public string Children
        {
            
get
            {
                
string[] children = new string[_person.Children.Count];

                
for(int i = 0; i<_person.Children.Count;i++)
                {
                   children[i] 
= _person.Children[i].FirstName;
                }

                
return string.Join("",children);
            }
        }

        
public string Pets
        {
            
get { return string.Join("", _person.Pets.ToArray()); }
        }

        
public string Cars
        {
            
get { return string.Join("", _person.Cars.ToArray()); }
        }

        
public string Person
        {
            
get
            {
                
return "Name = " + _person.FirstName + " " + _person.LastName +
                   
", Age = " + _person.Age;
            }
        }
    }

 

 

显示直观的Watch值

,
     Type = "Alcohol Age Check")]
    
public string AlcoholAgeCheck
    {
     
get { return string.Empty; }
    }

如上代码,可以通过 DebuggerDisplay 特性使用条件判断来自定义Watch窗口显示的信息
如果单个三元运算不能满足,可以将判断代码封装到一个方法中去,如:

 ValidateObject()
    {
        List<string> violations = new List<string>();

        
//make sure that a first name has been specified
        if (0 == _person.FirstName.Length)
        {
            violations.Add(
"FirstName is empty");
        }

        
//make sure that a last name has been specified
        if (0 == _person.LastName.Length)
        {
            violations.Add(
"LastName is empty");
        }

        
//make sure that age is greater than 0
        if (0 > _person.Age)
        {
            violations.Add(
"Age is less than 0");
        }

        
//put additional validations here

        
//return results to DebuggerDisplay attribute
        return string.Join("", violations.ToArray());
    }

    [DebuggerDisplay(
"{ValidateObject()}")]
    
public string BusinessRulesViolations
    {
        
get { return string.Empty; }
    }

 


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET登录身份验证 一发布时间:2022-07-10
下一篇:
ASP.NET性能优化之分布式Session发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap