通用委托或通用委托问题

And*_*ock 1 c# generics delegates

如何编译以下代码?

    Action<MyClass<object, object>> func = x => Console.WriteLine(x.ToString());

    public void Apply<T1, T2>(MyClass<T1, T2> target)
    {
        func.Invoke(target);
    }
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用,因为MyClass <T1,T2>不是MyClass <object,object>,但我该怎么办?

我可以使功能通用吗?或者我可以施展目标吗?

不管怎样,怎么样?

如果它有帮助,那么func中的任何内容都不会执行T1或T2特定的任何操作.我知道这个假设可能会让它变得脆弱,但单元测试应该能够解决任何问题.

编辑:我现在正在通过大量空接口来避免这个问题,而我宁愿这样做!

谢谢

Jon*_*eet 10

好吧,一个选项是编写一个泛型方法来返回正确的函数类型:

public void Apply<T1, T2>(MyClass<T1, T2> target)
{
    GetFunc<T1,T2>().Invoke(target);
}

private Action<MyClass<T1,T2>> GetFunc()
{
    return x => Console.WriteLine(x.ToString());
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的希望能够声明"我可以使用任何MyClass"操作,我建议您创建一个非泛型类型MyClass,并MyClass<T1,T2>从中派生:

public class MyClass
{
    // Put common stuff in here
}

public class MyClass<T1, T2> : MyClass
{
    // Put stuff using T1 and T2 here
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用一个Action<MyClass>代替.