缓存属性在VS 2010中的行为与断点不同

本文关键字:断点 属性 VS 2010 缓存 | 更新日期: 2023-09-27 18:26:53

我有一堆实现缓存属性的类,这些属性返回从数据库检索到的数据集合。我遇到的问题是,如果我在调试VS2010时设置断点,似乎会执行属性本身,以显示字典项的计数。

如何在VS准备好之前阻止它执行属性?提前感谢。。。

显示问题的示例:

public class CTest
{
    private ICollection<int> _col = null;
    public ICollection<int> col
    {
        get
        {
            if (this._col == null)
            {
                System.Diagnostics.Debug.Assert(false, "ASSERT!");
                this._col = new Collection<int>();
                this._col.Add(1);
                this._col.Add(2);
                this._col.Add(3);
            }
            return this._col;
        }
    }
}


CTest test = new CTest();
// A breakpoint on this line and no assert will fire
int nCount = test.col.Count;
// A breakpoint on this line and assert will fire
nCount = test.col.Count;

缓存属性在VS 2010中的行为与断点不同

这是由自动属性评估引起的。.NET开发的通用指南指出,属性评估应快速不会产生副作用。显然,ORM中的缓存和延迟加载违反了这一原则,有利于提高可用性,但您所经历的是这种违反的后果之一。

若要解决此问题,需要在"调试器选项"对话框中关闭自动属性评估。有关详细信息,请参阅此MSDN链接。

(与此完全无关的是,标准.NET约定需要使用pascal大小写的公共成员,如属性和函数。请考虑将属性名称[Dic而不是dic]大写,并为其提供一个更具描述性的名称)。