4
public delegate T GenDel<T>();

class Program
{
    public static void genMet<T>(GenDel<T> d) { }

    static void Main(string[] args)
    {           
        genMet(new GenDel<string>(() => "Works"));
        genMet(() => "Works");
    }
}

上記の例では、ジェネリック メソッドはラムダ式をパラメーター ( genMet(() => "Works");) として受け取り、このラムダ式メソッドからパラメーターの型を推測できます。

メソッドが次の例でパラメーターの型を推測できないのはなぜですか。ここでは、ラムダ式の代わりにデリゲート インスタンスをパラメーターとして渡します。

        genMet(new GenDel(() => "Doesn't work")); // Error: Using the generic type 'GenDel<T>' 
                                                  // requires 1 type arguments
4

2 に答える 2

8

型推論はジェネリックメソッドにのみ適用され、ジェネリック型やそのコンストラクターには適用されません。

于 2012-12-10T18:23:00.390 に答える
4

2 番目の例には型の推論はありません。使用するデリゲート型を明示的に指定しています。この場合、非ジェネリックGenDel型がないため、型パラメーターを指定する必要があります。

于 2012-12-10T18:24:18.693 に答える