试图从 C# 中的结构数组中删除一个条目。获取相互矛盾的信息?
Posted
技术标签:
【中文标题】试图从 C# 中的结构数组中删除一个条目。获取相互矛盾的信息?【英文标题】:Trying to delete an entry from a structure array in C#. Getting conflicting information? 【发布时间】: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。 您不能从数组中删除。您需要先转换为列表。 您至少应该发布一个人们可以复制/粘贴的示例。事实上,您的代码无法编译。 感谢您的反馈。这是我在这里的第一篇文章,下次我会照你说的做。我确实找到了 【参考方案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
以上是关于试图从 C# 中的结构数组中删除一个条目。获取相互矛盾的信息?的主要内容,如果未能解决你的问题,请参考以下文章
C#,抛出错误试图从二维数组中获取值并在 TryParse 中使用它