将方法作为参数传递时,无法推断类型参数

时间:2019-09-26 09:17:16

标签: c# generics

我有一段简单的代码:

class Program
{
    static void test<T1>(Action<T1> action) { }

    static void test<T1, T2>(Action<T1, T2> action) {  }

    static void B(int a) { }
    static void C(string a, int b) { }

    static void Main(string[] args)
    {
        test(B);
        test(C);
    }
}

由于两个错误而无法编译:

The type arguments for method 'Program.test<T1>(Action<T1>)' cannot be
inferred from the usage. Try specifying the type arguments explicitly.
The type arguments for method 'Program.test<T1>(Action<T1>)' cannot be
inferred from the usage. Try specifying the type arguments explicitly.

如果我明确指定类型参数,它当然可以工作。

test<int>(B);

或者如果我将B强制转换为正确的操作类型:

test((Action<int>) B)

我希望有一个优雅的解决方案,其中C#编译器会自动识别正确的方法重载。

这是唯一可能吗?

0 个答案:

没有答案