【问题标题】:Trying to delete an entry from a structure array in C#. Getting conflicting information?试图从 C# 中的结构数组中删除一个条目。获取相互矛盾的信息?
【发布时间】:2019-01-26 09:53:58
【问题描述】:

我一直在研究这个主题并得到相互矛盾的答案。任何帮助表示赞赏。 对于作业,我被指示创建一个数组结构。我试图在一种情况下删除一个条目,并在另一种情况下进行更改。这应该是由字段之一而不是索引号。

var countOfEmployees = 0;
var employees = new EmployeeData[100];
Console.Write("Please enter employee you want to delete:");
string deleteEmployee = Console.ReadLine();
bool deleted = false;
for (int x = 0; x < countOfemployees; x++)
{

 if (items[x].ItemNumber == deleteItemNumber)

  {
 deleted = true;   

  }
if (true)
 {

//code goes here                                       

  }

感谢任何帮助!

【问题讨论】:

  • 我们看不到您在哪里创建了 deleteItemNumber。
  • 您不能从数组中删除。您需要先转换为列表。
  • 您至少应该发布一个人们可以复制/粘贴的示例。事实上,您的代码无法编译。
  • 感谢您的反馈。这是我在这里的第一篇文章,下次我会照你说的做。我确实找到了

标签: c# arrays struct


【解决方案1】:

在数组中,您也许可以从占位符中删除值,但如果不采取一些措施,您将无法删除实际的项目。

基本上,您可以做的是:找到您搜索的值,并将其替换为 null 并在其他所有函数中进行相应处理。

选项 2 是删除该项目,然后使用一个函数将所有具有更高索引的值向上“移动”。

选项 3 是使用 C#/.NET 必须为集合提供的高级功能、创建列表、删除项目并转换回数组。

var employees = new EmployeeData[100];
var list = employees.ToList();
int index=-1;

//search through in a loop (won't write it here)...
    index = x; //get the index in your list then break the loop
    break; //end the loop


list.RemoveAt(index); //delete the spot outside the loop
employees=list.ToArray();

当然,如果搜索未找到任何内容,则需要进行检查,但我认为您可以在没有我帮助的情况下实现这一点。 这当然是我假设数组中只有一个具有这种值的条目。 如果不是,您将不得不遍历并删除它们,直到搜索不再找到任何东西。

【讨论】:

  • 谢谢。这非常有帮助!
  • 还有一个问题。我实施了你的第三个建议,虽然它完美地工作,但留下了一个空值。当它仍然是一个列表时清除它会更好吗?或者我应该在它回到阵列后这样做吗? (或者这有关系吗?我是不是想多了?)
  • 我可以通过添加 var numberOfEmployees= 0; 来删除空条目然后在块的末尾添加 numberOfEmployees--
  • 我建议用list.Count中的值覆盖countOfEmployees
猜你喜欢
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多