我有一个名为 Estimate 的类,它具有以下字段和属性:
private IList<RouteInformation> _routeMatrix;
public virtual IList<RouteInformation> RouteMatrix
{
get
{
if (_routeMatrix != null && _routeMatrix.Count > 0)
{
var routeMatrix = _routeMatrix.ToList();
routeMatrix =
routeMatrix.OrderBy(tm => tm.Level.LevelType).ThenBy(tm => tm.Level.LevelValue).ToList();
return routeMatrix;
}
else return _routeMatrix;
}
set { _routeMatrix = value; }
}
因此,在 getter 方法中,我只是按级别类型和级别值对 _routeMatrix 进行排序,然后返回排序后的列表。
在我的一个程序中,我有以下代码:
public void SaveApprovers(string[] approvers)
{
int i = 1;
foreach (var approver in approvers)
{
var role = Repository.Get<Role>(long.Parse(approver));
var level = new Models.Level
{
LevelType = LevelType.Approver,
LevelValue = (LevelValue)i,
Role = role
};
Repository.Save(level);
var routeInformation = new Models.RouteInformation
{
Level = level,
RouteObjectType = RouteObjectType.Estimate,
RouteObjectId = _estimate.Id
};
Repository.Save(routeInformation);
_estimate.RouteMatrix.Add(routeInformation); // <--- The problem is here
Repository.Save(_estimate);
i++;
}
}
问题是,如果有多个批准者(即:approvers
数组的长度大于 1,则只routeInformation
添加第一个RouteMatrix
。我不知道其余的会发生什么,但 Add 方法不会t给出任何错误。
早些时候,RouteMatrix 是一个公共字段。在我将其设为私有并将其封装在公共属性中后,此问题开始出现。