プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

【C#】型をメソッドに渡す

渡すとはちょっと違うんですが、こんな感じにすると渡せます。

public T[] Hoge<T>(T a)
{
    T[] arr = new T[5];
    arr[0] = a;
    return arr;
}

こういうのをジェネリックといいます。
Listでおなじみのアレですね。

メソッド名の後ろに<T>*1とつけるとジェネリックメソッドになります。
呼び出し時にTの部分に型を以下のように指定すると、Tが指定した型になった状態でメソッドが動作します。

Hoge<int>(324)

これは以下と同じになります。

public int[] Hoge<int>(int a) 
{
    int[] arr = new int[5];
    arr[0] = a;
    return arr;
}

結果
f:id:shirakamisauto:20160309111624p:plain


複数渡すこともできます。

public Dictionary<T1, T2> GetDic<T1, T2>(T1 a, T2 b)
{
    Dictionary<T1, T2> dic = new Dictionary<T1, T2>();
    dic.Add(a, b);
    return dic;
}

以下のように使えます。

var x = GetDic<double, string>(0.4,"あ");

これは以下と同じです。

public Dictionary<double, string> GetDic<double, string>(double a, string b)
{
    Dictionary<double, string> dic = new Dictionary<double, string>();
    dic.Add(a, b);
    return dic;
}

結果
f:id:shirakamisauto:20160309111630p:plain

参考
ジェネリック - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

*1:Tの名称は別に何でもいい