我认为您错过了一个事实,即ToList()
创建新List<T>
的而不是返回基础的。
所以当你打电话时:
var list = vehicleList.Vehicles;
list.Add(new Vehicle());
list.Add(new Vehicle());
Console.WriteLine(vehicleList.Vehicles.Count);
它将2
为您的第一个Vehicles
财产声明和0
第二个财产声明打印。
那是因为在您的第二个属性声明中,您将项目添加到List
刚刚使用ToList()
调用创建的项目,而不是来自_vehicles
支持字段的项目。
要使其工作,请尝试以下操作:
public List<Vehicle> Vehicles
{
get { return (_vehicles = _vehicles.OrderBy(v => v.Year).ToList()); }
}
或者使用List<T>.Sort
方法而不是OrderBy
LINQ 扩展方法:
public List<Vehicle> Vehicles
{
get
{
_vehicles.Sort((v1, v2) => v1.Year.CompareTo(v2.Year));
return _vehicles;
}
}
但要明确一点:您应该高度考虑,拥有这种财产的总体想法是错误的。您需要始终对数据进行排序吗?使用适当的数据结构,而不是每次触发属性 getter 时排序SortedList<int, Vehicle>
的标准。List