なるほどな。
それはそれとして、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)
に伴う変更を行いました。
コメントを投稿