【问题标题】:Does expanding arraylist of objects make a new object?扩展对象数组列表是否会生成一个新对象?
【发布时间】:2019-11-01 13:11:39
【问题描述】:

假设我们有一个 Employe 类型的数组列表,将它的长度扩展 1 会在列表中创建一个新对象吗?

else 语句中的代码是否正确?是否推荐?

    public void ModifierEmp(int c)
    {
        for(int i = 0; i < Ann.Count; i++)
        {
            if(Ann[i].Code == c)
            {
                Ann[i].saisie();
            } else
            {
                i = Ann.Count + 1; //expanding arraylist ann 
                Ann[i].saisie(); //saisie a method for the user to input Employe infos
            }
        }
    }

https://imgur.com/VfFHDKu"code sn-p"

【问题讨论】:

  • 请将完整代码 sn-p 粘贴到帖子正文中。
  • i = Ann.Count + 1 没有按照评论所说的那样做。你为什么认为它会这样做?
  • 我收到 ann.count +1 ;所以当 ann .count = 10 我收到 11 并在该新索引中写入新的员工信息
  • StriplingWarrior 已经解释了实际发生的情况,但您现在应该单步执行代码并亲自观察效果。每次通过循环检查i 的值,看看随着时间的推移值的变化如何与您预期的不同。使用不同的数据(匹配列表开头的元素,匹配中间的元素等)来查看不同的效果。

标签: c# oop object arraylist


【解决方案1】:
i = Ann.Count + 1;

上面的代码并没有扩展列表:它只是将您的索引变量 (i) 设置为具有新值。

如果您想让列表更大,您必须告诉它要将哪个对象放入您创建的新空间中。例如:

Ann.Add(anotherItem);

当然,这使您能够决定是否添加一个现有项、创建一个新项(例如Ann.Add(new Something() { Code = c })),或者甚至添加一个null 值到列表中(这通常不是一个好主意)。

【讨论】:

  • 那么,如何在 else 语句中将新员工动态添加到列表中?
  • 可能类似于Ann.Add(new Employee(c))
  • 我认为您正在尝试查看列表是否包含具有给定代码的任何员工,如果没有则添加新员工。如果您仔细考虑您的for 循环逻辑是如何工作的,那么您所拥有的代码不会那样做。您可以改为执行if(Ann.FirstOrDefault(e =&gt; e.Code == c) is Employee matched) {matched.saisie();} else {var newEmployee = new Employee(code); Ann.Add(newEmployee); newEmployee.saisie(); 之类的操作并完全避免循环。
  • 您可能还想研究使用 Dictionary 并在 Code 属性上键入员工,因为该结构是为使用特定键查找项目而设计的。
猜你喜欢
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2011-05-07
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多