【问题标题】:Add item to existing Collection C#将项目添加到现有集合 C#
【发布时间】:2016-10-28 13:53:56
【问题描述】:

我有收藏:

    public class Test
    {
        public double Index { set; get; }
        public double A { set; get; }
        public double B { set; get; }
        public double C { set; get; }
    }
    List<Test> test = new List<Test>();

我用一些随机数填充了 A 和 B。之后,我想在集合中添加项目 C。例如,我尝试的是:

        foreach (Test t in test)
        {
            c = t.A + t.B;
            test.Add(new Test {C = c }); <------ 
        }

如何在 A 和 B 的相同位置添加元素 C? (对不起我的英语)

【问题讨论】:

  • 集合的“项目”已经有一个C 属性,因此看起来你想要做的是:foreach (Test t in test) { t.C = t.A + t.B; },你能验证这是否是你想要的吗?
  • 一个位置只能有一个元素。不过,您可以使用 Insert(index, item) 代替 od 添加。
  • 只是说(因为我真的不明白你想要做什么,所以这可能是你要考虑的事情)...public double C { get { return A + B; } }
  • @LasseV.Karlsen 是的……很简单,哈哈……有时我想得很辛苦……非常感谢
  • 请看一下已经发布的答案,这可能是一个更好的解决方案。

标签: c# collections


【解决方案1】:

如果您希望 CAB 的总和,则使用计算域可能会更好:

public class Test
{
    public double Index { set; get; }
    public double A { set; get; }
    public double B { set; get; }
    public double C 
    { 
       get
       {
            return A + B;
       } 
    }
}

所以

Test test = new Test()
{
   A = 1;
   B = 2;
};

test.C == 3; //true

上面的好处是C总是其他值的总和,你不需要每次都重新计算。所以,如果我采取上述措施:

test.B = 3; //instead of the original 2

然后C 保持同步:

test.C == 3; //false
test.C == 4; //now true

使用您的原始方法(或其他答案)执行此操作意味着重新循环结果集。

或者在 C# 6.0 中,您可以使用 expression-bodied property

public class Test
{
    public double Index { set; get; }
    public double A { set; get; }
    public double B { set; get; }
    public double C =>  A + B;
}

【讨论】:

    【解决方案2】:
    foreach (Test t in test)
    {
        t.C = t.A + t.B;
    } 
    

    只需将属性设置为等式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2012-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多