Tips - Visual C#

【TOP】

C#でRedim Preserve?
VBではお馴染みの配列の要素数を動的に変更する Redim ステートメント。
C#では残念ながら直接これに相当するものは無いようです。
それを次のようにして実現してみます。
// 文字列型の配列をLength==3で宣言する。 string[] strAry = {"a","b","c"}; // 一時格納用の文字列型配列を宣言する。 string[] temp; // 一時配列のLengthをstrAryより1多く設定する。 temp = new string[strAry.Length + 1]; // strAryの要素をtempにコピーする。 strAry.CopyTo(temp,0); // strAryの要素をコピーしたtempを改めてstrAryとする。 strAry = temp; /* strAryのLengthは4になっているので 配列の末尾にデータを追加することが出来る。*/ strAry[strAry.Length - 1] = "d";
動的に Length を変えるなら、配列ではなく、ArrayList を用いるもの1つの手です。
ただ、ArrayList に格納される値は Object 型なので、参照するときはキャストする必要があります。
(.NET Framework 2.0 では型を指定できる ArrayList が登場するとかしないとか・・・2004年9月現在)


2006.05.05 追記
→System.Collections.Genericクラスに実装されています。
// 例 System.Collections.Generic.List<int> myIntList = new System.Collections.Generic.List<int>(); myIntList.Add(2);
また、System.ArrayクラスにResizeメソッドが追加され、配列の次元を動的に変更することができるようになりました。
class Program { static void Main(string[] args) { int[] myArray = {3, 2, 6, 8}; Console.WriteLine("myArray.Length = {0}", myArray.Length); for(int i=0; i < myArray.Length; i++) Console.WriteLine("myArray[{0}] = {1}", i, myArray[i].ToString()); Console.WriteLine(string.Empty); System.Array.Resize(ref myArray, 6); myArray[4] = 100; myArray[5] = 101; Console.WriteLine("myArray.Length = {0}", myArray.Length); for (int i = 0; i < myArray.Length; i++) Console.WriteLine("myArray[{0}] = {1}", i, myArray[i].ToString()); } }
これを実行すると以下のようになります。
myArray.Length = 4 myArray[0] = 3 myArray[1] = 2 myArray[2] = 6 myArray[3] = 8 myArray.Length = 6 myArray[0] = 3 myArray[1] = 2 myArray[2] = 6 myArray[3] = 8 myArray[4] = 100 myArray[5] = 101
【戻る】