0

だから私はいくつかのデータを配列に格納するいくつかのコードを持っています。新しいデータが入ると、新しい配列アイテム(配列アイテムの総数)に入れられ、配列アイテムの総数が追加されて、次のデータビットに対応できなくなります。しかし、配列にデータを追加しようとすると、それはarray [0]なのか、それとも配列インデックスを範囲外にスローするものなのか?

宣言:

string[] TabMessages = { };
int TotalTabs = 0;

それを使用する:

DevComponents.DotNetBar.TabItem Tab = TabStrip.CreateTab(TabName);
Tab.Tooltip = id + "|" + TabIndex;
TabMessages[TotalTabs] = "";//index out of bounds of array
TabStrip.SelectedTab = Tab;
TotalTabs++;

助けを借りて、配列への新しいエントリを作成しようとすると、インデックスが配列の範囲外であるというエラーがスローされるため、これは本当に迷惑です...

4

4 に答える 4

2

配列は静的な長さです。長さ 0 の配列を定義してから、配列内の存在しない要素にアクセスしようとしました。List<string>使用するすべての値を保持するのに十分な大きさの配列を作成するか、 のような静的サイズのコレクションの代わりに のような非静的コレクションを使用する必要がありますstring[]

List<string> TabMessages = new List<string>();
TabMessages.Add("");

インデックスでアクセスできるものが必要であるが、すべての可能な値を提供したくない場合は、辞書を使用します。

Dictionary<int, string> TabMessages = new Dictionary<int, string>();
TabMessages[TotalTabs] = "";
于 2013-02-18T04:42:47.600 に答える
1

C#の配列は動的ではなく、固定サイズです。何かリストaList<string>を使用し、Addメソッドを使用して新しいエントリを挿入してみてください。

TabMessagesは0要素の配列です(これがあなたがそれを宣言した方法です)。そのため、要素を追加(または設定)することはできません。毎回、インデックスの範囲外の例外が発生します。

于 2013-02-18T04:39:55.660 に答える
1

このコード:

string[] TabMessages = { };

次と同等です。

string[] TabMessages = new string[0];

サイズ0の配列を作成したことを意味します。そのため、この種の例外が発生しました。List<string>したがって、動的サイズで代わりに使用できます。

var TabMessages = new List<string>();

次に、最初の項目を追加できます。

TabMessages.Add(string.Empty);

または、ビジネス ルールに応じて固定サイズの文字列配列を作成します。

string[] TabMessages = new string[5];  // create string array with 5 elements
于 2013-02-18T04:42:13.520 に答える
0

配列は固定サイズとして定義されます。宣言string[] TabMessages = {}は同じですstring[0] Tabmessages;

配列のサイズを変更できます (ただし、これはかなりコストのかかるプロセスだと思います) 。http://www.dotnetperls.com/array-resizeを参照してください。

代わりに (できれば)、ある種の List 構成を使用してみてください

于 2013-02-18T04:44:59.540 に答える