我有一个由业务对象继承的业务对象基类:
public class ErrorBase
{
public bool HasError { get; set; }
public List<Error> ErrorList { get; set; }
public ErrorBase()
{
HasError = false;
ErrorList = new List<Error>();
}
}这能被优化吗?我担心的是,每次实例化业务对象时都会初始化List<Error>,而不管是否添加了错误对象。
我能想到的唯一选择是初始化ErrorList = null,然后在调用ErrorList.Add()之前检查ErrorList != null,但我不确定在添加错误之前每次执行检查实际上是一种优化。当然,它在向List<>添加错误对象的过程中增加了步骤。
还有别的办法我没想过吗?如果没有,这些方法中的一种是否被视为最佳做法?
发布于 2014-01-10 03:56:33
首先:我怀疑创建一个新的List<>对象会产生足够的开销,这会对您的系统产生可衡量的影响,所以除非您能够证明这是一个问题,否则不要担心它。
话虽如此:这个问题的经典解决方案是延迟实例化。由于您已经拥有了一个属性,这可以很容易地通过以下方法实现:
public class ErrorBase
{
public bool HasError { get; set; }
private List<Error> _ErrorList = null;
public List<Error> ErrorList
{
get
{
if (_ErrorList == null)
{
_ErrorList = new List<Error>();
}
return _ErrorList;
}
}
public ErrorBase()
{
HasError = false;
}
}如果在其中添加了多个线程,那么需要在get中添加一些锁定--但另一方面,List<>本身并不是线程安全的,所以我假设情况并非如此。
在.NET 4.0和更高版本中,您有了Lazy<>,这将使代码更短一些。
https://codereview.stackexchange.com/questions/38961
复制相似问题