缓存属性在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;
这是由自动属性评估引起的。.NET开发的通用指南指出,属性评估应快速且不会产生副作用。显然,ORM中的缓存和延迟加载违反了这一原则,有利于提高可用性,但您所经历的是这种违反的后果之一。
若要解决此问题,需要在"调试器选项"对话框中关闭自动属性评估。有关详细信息,请参阅此MSDN链接。
(与此完全无关的是,标准.NET约定需要使用pascal大小写的公共成员,如属性和函数。请考虑将属性名称[Dic
而不是dic
]大写,并为其提供一个更具描述性的名称)。