Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用下一个对象添加';列表中的属性值_C#_List - Fatal编程技术网

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;
}