C# 缓存属性在使用breakint的VS 2010中的行为有所不同

C# 缓存属性在使用breakint的VS 2010中的行为有所不同,c#,C#,我有一组实现缓存属性的类,这些属性返回从数据库检索的数据集合。我遇到的问题是,如果在调试VS 2010时设置断点,以执行属性本身,从而显示字典项的计数 如何在属性准备就绪之前阻止VS执行该属性? 先谢谢你 显示问题的示例: public class CTest { private ICollection<int> _col = null; public ICollection<int> col { get {

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

如何在属性准备就绪之前阻止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;
公共类测试
{
私有ICollection _col=null;
公共ICollection col
{
得到
{
if(this.\u col==null)
{
System.Diagnostics.Debug.Assert(false,“Assert!”);
此._col=new Collection();
本条第(1)款;
本条第(2)款;
本条第(3)款;
}
把这个还给我;
}
}
}
CTest测试=新的CTest();
//这一行上有一个断点,并且不会触发断言
int nCount=test.col.Count;
//将触发此行上的断点和断言
nCount=test.col.Count;

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

要解决此问题,需要在“调试器选项”对话框中关闭自动属性求值。有关更多信息,请参阅


(在一个完全无关的注释中,标准.NET约定调用Pascal实例的公共成员,如属性和函数。考虑将您的属性名大写[<代码> DIC而不是<代码> DIC < /代码>,并给出一个更具描述性的名称)。

至少向属性名添加<代码> T <代码>…我的意思是,真的…是的,不要给每个人看你的dic。(这是我在几周内第二次开这样的玩笑了,耶)哎呀……编辑。经过漫长而沮丧的一天之后,我很快发布了这篇文章。