c# - 通用委托(delegate)或通用转换问题

标签 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);
    }

我知道它不起作用,因为 MyClass 不是 MyClass,但我能做什么?

我可以使函数通用吗?
或者
我可以施放目标吗?

无论哪种方式,如何?

如果它有帮助,那么 func 中的任何内容都不会做任何特定于 T1 或 T2 的事情。我知道这种假设可能会使它变得脆弱,但单元测试应该能发现任何问题。

编辑:我现在正在避免这个问题,因为我宁愿放弃大量空接口(interface)!

谢谢

最佳答案

好吧,一种选择是编写一个通用方法来返回正确类型的函数:

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());
}

或者,如果您真的希望能够声明“我可以使用任何 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
}

然后你可以使用 Action<MyClass>反而。

关于c# - 通用委托(delegate)或通用转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588319/

相关文章:

c# - 分配给委托(delegate)的通用方法

c# - 创建由参数/委托(delegate)发送的类的实例

vb.net - 用于自动添加事件委托(delegate)方法的 Visual Studio 快捷方式

c# - Method : String. 长度的计量单位

c# - 这是什么??这里的符号意思

c# - 从公钥字节数组重新创建椭圆曲线的 X 和 Y

arrays - 如何从数组<>中删除协议(protocol)

java - 将 getClass() 与一些复杂的 Java 泛型一起使用时编译类型不匹配

c# - 在创建对象的线程上调用方法

c# - 使用泛型检查默认值