両方の配列を空の配列として定義します。そのため、それらにインデックスを作成しようとすると、インデックスがバインドされていないエラーが発生します。
配列は動的に拡張されません。それが必要な場合は、コレクション型を使用し、後で配列に変換できます。
これを試して:
int length = Convert.ToInt32(Label15.Text);
string[] sublist = new string[length-1];
int[] maxmarkslist = new int[length-1];
for (int i = 0; i < length; i++)
{
string sub = "subject" + i;
string marks = "maxmarks" + i;
TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
sublist[i] = subject.Text;
maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
}
または、コレクション(リスト)タイプでこれを行う方法は次のとおりです。
int length = Convert.ToInt32(Label15.Text);
List<string> sublist1 = new List<string>();
List<int> maxmarkslist1 = new List<int>();
for (int i = 0; i < Convert.ToInt32(Label15.Text); i++)
{
string sub = "subject" + i;
string marks = "maxmarks" + i;
TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
sublist1.Add(subject.Text);
maxmarkslist1.Add(Convert.ToInt32(maxmarks.Text));
}
string[] sublist = sublist1.ToArray();
int[] maxmarkslist = maxmarkslist1.ToArray();
コレクションでは、事前にサイズを指定する必要がないことに注意してください。ただし、必要に応じて拡張できるため、アイテムを追加し続けてください。しかし、配列はこれを行うことができません。
Your string[] sublist = new string[] { };
は、配列を作成して初期化するショートカット メソッドです。サイズを指定する必要はありませんが、コンパイラは {} 間の要素をカウントし、サイズを適切に設定します。あなたの場合、 {} 内に要素がないため、空の配列が作成されます。