C# 使用下一个对象添加';列表中的属性值
我想使用列表中下一个对象的属性值进行添加。 下面是示例代码C# 使用下一个对象添加';列表中的属性值,c#,list,C#,List,我想使用列表中下一个对象的属性值进行添加。 下面是示例代码 public class MyClass { public List<Model> modelList { get; set; } public MyClass() { modelList = GetModelList(); } public List<Model> GetModelList() { return new List&
public class MyClass
{
public List<Model> modelList { get; set; }
public MyClass()
{
modelList = GetModelList();
}
public List<Model> GetModelList()
{
return new List<Model>
{
new Model(){Number = 1, Total = 0},
new Model(){Number = 2, Total = 0},
new Model(){Number = 3, Total = 0},
new Model(){Number = 4, Total = 0},
};
}
}
public class Model
{
public int Number { get; set; }
public int Total { get; set; }
}
我添加了一个方法
ComputeTotal
来显示解决方案
public MyClass()
{
modelList = GetModelList();
modelList = ComputeTotal(modelList);
}
private List<Model> ComputeTotal(List<Model> models)
{
for (var i = 0; i < models.Count; i++)
{
var hasNext = (i + 1) < models.Count;
// no computation if hasNext is false
if (hasNext)
{
var currentNumber = models[i].Number;
var nextNumber = models[i + 1].Number;
models[i].Total = currentNumber + nextNumber;
}
}
return models;
}
publicmyclass()
{
modelList=GetModelList();
modelList=ComputeTotal(modelList);
}
私有列表计算机总数(列表模型)
{
对于(var i=0;i
我知道这是非常明确的。但它清楚地表明了这一方针
更新:
添加了hasNext
检查以避免System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。
最好的方法(IMHO)是当您的
模型不知道列表的存储情况时,上次计算的结果应该是什么?@Daniel last object应该是0,因为我已经用我的解决方案更新了问题这不是同一个代码吗,问题中“下面是我目前如何实现的代码”下列出的代码事实并非如此。因为您提到的代码将抛出System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。”你为什么这么认为?它从0
运行到models.Count-1
,与您的一样。除了它不做无用的hasNext
计算之外。在我提供解决方案后,他正在更新他的代码。来自Dhruv的代码示例不完整。他需要做下一步-检查其他地方你不明白。操作码也在工作。问题中的代码未抛出ArgumentOutOfRangeException
。您的var hasNext=(i+1)
计算是在每次迭代中进行的,而且,如果您将其移动到for
-loop的前提条件,则它是无用的。就像在问题中一样:for(inti=0;i
并且对于一个庞大的列表,您不需要计算hasNext
一百万次。但是,如果将此检查移动到
-loop前提条件的,则代码将与OP已经使用的代码完全相同。
public MyClass()
{
modelList = GetModelList();
modelList = ComputeTotal(modelList);
}
private List<Model> ComputeTotal(List<Model> models)
{
for (var i = 0; i < models.Count; i++)
{
var hasNext = (i + 1) < models.Count;
// no computation if hasNext is false
if (hasNext)
{
var currentNumber = models[i].Number;
var nextNumber = models[i + 1].Number;
models[i].Total = currentNumber + nextNumber;
}
}
return models;
}