2010年9月22日水曜日

C# の配列の初期化について

このエントリーをはてなブックマークに追加
メモ、on Mono 2.6.7


なるほどな。

それはそれとして、C# では、
using System;

namespace Example
{
  public static class Ext
  {
    public static T[] InitializeWith<T>(this T[] array, T val)
    {
      for (int i = 0; i < array.Length; i++)
      {
        array[i] = val;
      }

      return array;
    }

    public static void Print<T>(this T[] array, string separater)
    {
      foreach (T t in array)
      {
        Console.Write("{0}{1}", t.ToString(), separater);
      }

      Console.WriteLine("\b ");
    }
  }

  public class Program
  {
    public static void Main(string[] args)
    {
      //int[] ar0 = new int[3]{0}; // error CS0847: An array initializer of length `3' was expected
      //int[] ar0 = new int[3]{}; // error CS0847: An array initializer of length `3' was expected
      int[] ar0 = new int[3];

      int[] ar1 = new int[3]{ 1, 2, 3 };
      int[] ar2 = new int[]{ 4, 5, 6 };
      int[] ar3 = { 7, 8, 9 };
      var ar4 = new []{ 0, 1, 2 };

      int[] ar5 = new int[3].InitializeWith(1);

      ar0.Print(","); // 0,0,0
      ar1.Print(","); // 1,2,3
      ar2.Print(","); // 4,5,6
      ar3.Print(","); // 7,8,9
      ar4.Print(","); // 0,1,2
      ar5.Print(","); // 1,1,1
    }
  }
}
/*
 * Build:
 *
 *   gmcs array.cs
 *
 * Run:
 *
 *   mono array.exe
 *
 */
宣言時に初期化(配列初期化子({...})で設定)しなかった場合、配列の全要素は、配列の型の規定値で初期化される。型の規定値については、「MSDN:Default Values Table (C# Reference)」を参照。

任意の値で配列の全要素を設定(初期化)したい場合は、拡張メソッド等を用意してやればいいのかな。

1 件のコメント:

sta.blockhead さんのコメント...

Before:
public static void Print<T>(this T[] array, string title)

After:
public static void Print<T>(this T[] array, string separater)

に伴う変更を行いました。

コメントを投稿