如何更新列表中每一行的字段值?

时间:2017-09-30 12:34:49

标签: c#

我有这堂课:

public class Test
{
    public string Id { get; set; }
    public int Number { get; set; }
    public int DoubleNumber { get; set; }
}

和一个清单

List<Test> myTestList;

如何使myTestList中字段DoubleNumber的值等于Number的值的两倍?请注意,如果需要,我可以创建另一个列表。

2 个答案:

答案 0 :(得分:0)

可以使用foreach语句的一种方式:

foreach(var item in myTestList)
{
    item.DoubleNumber = 2*item.Number;
}

使用LINQ的另一种方式。

var result = myTestList.Select(test => new Test 
                       { 
                           test.Id, 
                           test.Number, 
                           DoubleNumber = 2*test.Number; 
                       })
                       .ToList();

在这两种方式中我更喜欢第一种方式,因为它更清楚你要做什么和更高效(在第二种方法中你必须为myTestList中的每个对象创建一个新对象)。

答案 1 :(得分:0)

如果我理解你的问题:

foreach(Test item in myList) {
  item.DoubleNumber = 2*item.Number;
}

或者,如果没问题,只需删除setter并修改getter即可返回2x Number

public class Test
{
    public string Id { get; set; }
    public int Number { get; set; }
    public int DoubleNumber { get { return 2* this.Number; } } //completely remove setter
}

或者,如果您仍希望能够修改DoubleNumber

public class Test {
  private int m_num;
  private int m_doubleNum;

  public string Id {
    get;
    set;
  }
  public int Number {
    get {
      return this.m_num;
    }
    set {
      this.m_num = value;
      this.m_doubleNum = 2 * value; //when Number is set, update m_doubleNum too
    }
  }
  public int DoubleNumber {
    get {
      return this.m_doubleNum;
    }
    set {
      this.m_doubleNum = value; //allow manual setting of DoubleNumber
      //or maybe also modify Number here?
      //this.m_num = value / 2;
    }
  }
}