【问题标题】:Two Dimensional Array-Find first Null二维数组 - 查找第一个 Null
【发布时间】:2018-02-02 20:20:50
【问题描述】:

我有一个这样的数组,可以在用户前进时保存查询:

String [,] qArr=new String[2,6];

我对数组中的这 6 行中的每一行都有一个按钮。
这是我想要做的:
如果用户在第 4 步(按钮 4,因此保存了 8 个查询),现在单击按钮 2,那么我想删除数组中第 2 行之后的任何查询。
这是我所做的:

public void remQ(int position) //position is the row starting from 0   
{  
position=(position+1)*2;  
Array.Clear(qArr,position,qArr.Length);    
} 

Error1:这是我运行时得到的结果:

索引超出了数组的范围

调试显示这些值:

qArr=string[2,6]   
d=4   
qArr.Length=12

我该如何解决这个问题?

【问题讨论】:

  • 你不应该使用 qArr.Length,你应该告诉 qArr.Length - position 有你想要清除的元素数量。
  • 一个问题应该限制为一个问题。如果你有一个新问题(就像你在这里做的那样)然后问一个新问题,不要编辑当前问题。否则,之前回答您问题的答案不再完整。实际上,我可以快速提示您将数组交换为 string [6,2] 可能会表现出您想要的行为。
  • @Chris 我不确定是否应该开始一个新的,因为问题没有改变,只是错误改变了。无论如何,我把它恢复了。感谢您的快速提示,将尝试一下。

标签: c# arrays multidimensional-array


【解决方案1】:

您是否阅读过https://msdn.microsoft.com/en-us/library/system.array.clear(v=vs.110).aspx 以及导致该异常的原因是什么?

“索引和长度之和大于数组的大小。”

您将长度作为数组的总长度传递。除非您从索引 0 开始,否则您不会清除所有项目。您需要正确计算要清除的项目数量:

Array.Clear(qArr,position,qArr.Length-position); 

【讨论】:

  • 我确实读过它,但显然误解了它。在您通过阅读您的描述添加代码之前,我进行了修复。工作!谢谢!
  • 很高兴听到这个消息。我认为弄清楚该做什么并不难,但答案会更完整。随意投票/接受以表达您的感激之情(尽管您可能需要等待一段时间才能接受)。 :)
  • 这解决了我得到的错误,但我想在问题中做的事情仍然没有发生。该方法从第 2 列中删除所有值,并将所有值保留在第 1 列中。有什么想法吗?
猜你喜欢
  • 2022-10-13
  • 2022-01-22
  • 2021-03-03
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多