数组索引超出范围
Posted
技术标签:
【中文标题】数组索引超出范围【英文标题】:Array Index Is Out of Bounds 【发布时间】:2014-08-12 16:48:11 【问题描述】:我有这种方法可以根据其中的内容检查一行。我还有一个静态字符串数组,它初始化时没有任何内容。我遇到了一个超出范围的索引错误,这对我来说没有任何意义,因为我没有数组的最大长度。
这是我的方法:
private void PrintTable(DataTable table)
foreach (DataRow row in table.Rows)
litCanCount.Text = "Canoe count is: ";
litKayCount.Text = "Kayak count is: ";
string currRow = row["CraftType"].ToString();
if (currRow == CANOE)
Response.Write("CANOE INCREMENT!<br />");
CANOEi++;
txtCanCount.Text = CANOEi.ToString();
arr[i] = currRow;
i++;
if (currRow == KAYAK)
Response.Write("KAYAK INCREMENT!<br />");
KAYAKi++;
txtKayCount.Text = KAYAKi.ToString();
arr[i] = currRow;
i++;
for (int a = 0; arr.Length > a; a++)
Response.Write(arr[a] + "<br />");
这是我的类中最重要的部分,带有我的静态变量:
public partial class Index: System.Web.UI.Page
string CANOE = "Canoe";
string KAYAK = "Kayak";
int CANOEi;
int KAYAKi;
string[] arr = new string[] ;
int i = 0;
【问题讨论】:
arr
的长度为 0....
一个名为i
的全局变量?我喜欢它....
你得到了例外......
@user3267755 I initialized the array to be any size of strings
。你这么认为。您所做的是创建一个大小为零的数组。所以你不能访问 arr[0] (它需要一个最小长度 1)。测试一下。 var arr2 = new string[] ; arr2[0] = "";
您最好使用 List我认为您不需要该代码。如果您只想显示独木舟和皮划艇的数量,您可以使用基本调用 Select
DataRow[] canoe = table.Select("CraftType = 'Canoe'");
DataRow[] kayak = table.Select("CraftType = 'Kayak'");
litCanCount.Text = "Canoe count is: " + canoe.Length;
litKayCount.Text = "Kayak count is: " + kayak.Length;
如果您仔细想想,数据表只是一个复杂的数组,框架提供了许多处理数据表的方法。
例如,在 LINQ 中
int canoeNumber = table.AsEnumerable().Count(x => x["CraftType"].ToString() == "Canoe");
【讨论】:
您看到了我之前的尝试,并为我提供了一个更简单和最佳的解决方案,谢谢!【参考方案2】:数组必须指定长度
长度为零的数组(运行时异常)
static void Main()
string[] arr = new string[] ; //Array with no length
arr[0] = "hi"; //Runtime exception
一个长度的数组(无例外)
static void Main()
string[] arr = new string[1]; //Array with one length, index starts at zero
arr[0] = "test";
如果您想使用集合而不定义大小,请考虑使用列表
列表集合(无需长度定义)
List<string> listString = new List<string>();
listString.Add("hi");
listString.Add("bye");
listString.Add("oh hai");
【讨论】:
第一个示例编译。为什么不呢? (你会得到一个运行时异常,但这并不排除编译。) @PaulBinder:为什么那里有“无效”评论?那行特定的代码没有任何问题(除了奇怪之外)。即使是这样,它也不会很有帮助。它读作“出了点问题”——帮助不大,是吗?我会完全删除它。以上是关于数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章