2014年8月25日

メソッドの型推論で型パラメータの制約は使われない

[サンプルコード]

static class TestTypeInference
{
    static void Main()
    {
        // コンパイル NG
        DoSomething(new Dictionary<string, int[]>());

        // コンパイル OK
        DoSomething<int[], int>(new Dictionary<string, int[]>());
    }

    static void DoSomething<TCollection, TItem>(IDictionary<string, TCollection> map)
        where TCollection : ICollection<TItem>
    {
        Console.WriteLine("DoSomething");
    }
}

DoSomething メソッドは、map 引数の型から TCollection は推論できるが、TItem は推論できない。
TCollection の制約から分かりそうなもんだが、推論してくれない。

あきらめて型パラメータを指定してあげましょう、という話。

検証環境

Windows 7 64bit/Visual Studio 2010 SP1/.NET 4.0

参考URL

0 件のコメント:

コメントを投稿