我有这种方法根据其中的内容检查一行。我还有一个静态字符串数组,初始化时没有任何内容。我得到一个越界索引错误,这对我没有任何意义,因为我没有数组上的最大长度。
这是我的方法:
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;
}
答案 0 :(得分:2)
我认为您不需要该代码。如果您只想显示独木舟和皮划艇的数量,您可以使用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");
答案 1 :(得分:1)
必须为数组指定长度
长度为零的数组(运行时异常)
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");