6

たとえば、サブインデックス1の配列をC#で初期化することは可能ですか?

私はOffice相互運用機能を使用していますが、すべてのプロパティは1で始まるオブジェクト配列であり(元々はVB.NETでプログラムされていたと思います)、変更することはできません。配列全体を設定して、変更します。

回避策として、元の配列のクローンを作成し、その配列を変更して、完了したら全体として設定します。

しかし、私は新しい非ゼロベースの配列を作成することが可能かどうか疑問に思いました

4

8 に答える 8

18

以下のコードを参照して、要求に応じて実行することができます。

// Construct an array containing ints that has a length of 10 and a lower bound of 1
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 });

// insert 1 into position 1
lowerBoundArray.SetValue(1, 1);

//insert 2 into position 2
lowerBoundArray.SetValue(2, 2);

// IndexOutOfRangeException the lower bound of the array 
// is 1 and we are attempting to write into 0
lowerBoundArray.SetValue(1, 0);
于 2008-09-17T14:12:30.743 に答える
8

使用できますArray.CreateInstance

.NET の配列型を参照してください。

于 2008-09-17T13:11:13.713 に答える
1

単純ではありません。しかし、確かに独自のクラスを作成できます。プライベート変数として配列があり、ユーザーは自分の配列が 1 から始まると考えるでしょうが、実際にはゼロから始まり、すべての配列アクセスから 1 を引いています。

于 2008-09-17T13:10:31.390 に答える
0

独自の配列クラスを作成できます

于 2008-09-17T13:09:42.080 に答える
0

配列の開始インデックスを変更できるかどうかはわかりません。

ジェネリックを使用して独自の配列を作成し、内部で処理します。

于 2008-09-17T13:11:38.643 に答える
0

値が 1 の「オフセット」という名前の const int を保持し、常にコード内の添字に追加します。

于 2008-09-17T13:12:04.290 に答える
0

C# で非ゼロベースの配列を作成できるとは思いませんが、組み込みのデータ構造の周りに独自のラッパー クラスを簡単に作成できます。このラッパー クラスは、必要な配列型のプライベート インスタンスを保持します。[] インデックス演算子のオーバーロードは許可されていませんが、クラスにインデクサーを追加して、インデックス可能な配列のように動作させることができます。こちらを参照してください。作成したインデックス関数は、渡されたすべてのインデックスに 1 を加算 (または減算) できます。

次に、オブジェクトを次のように使用すると、正しく動作します。

myArrayObject[1]; //would return the zeroth element.
于 2008-09-17T13:14:33.457 に答える
-1

VB6 では、配列を 0 または 1 で開始するように変更できたので、VBScript でも同じことができると思います。C# の場合は不可能ですが、最初の [0] に NULL 値を追加し、[1] から実際の値を開始するだけです。もちろん、これは少し危険です...

于 2008-09-17T13:10:21.220 に答える