なるほどな。
それはそれとして、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 件のコメント:
Before:
public static void Print<T>(this T[] array, string title)
After:
public static void Print<T>(this T[] array, string separater)
に伴う変更を行いました。
コメントを投稿