C#generics:如果T是返回类型,它也可以是无效的吗? 如何将这些接口组合在一起?

我有以下接口,使用回调返回类型T的generics参数…

public interface IDoWork { T DoWork(); } 

但是我也有以下接口,但它不会调用回调,因为它返回void。

 public interface IDoWork { void DoWork(); } 

我可以组合这两个接口并使用运行时逻辑来确定差异吗? 我怎样才能做到这一点?

不幸的是,他们不能合并。

您可以在框架中看到这一点 – 这就是为什么有一个单独的TaskTask类,例如。

话虽这么说,您通常可以通过使用IDoWork并为值传递null等来共享此类场景中的实现。

return类型是方法签名的一部分,因此T DoWork()和void DoWork()是不同的,void不是一个类型,它不是null 。 这表明从方法返回时评估堆栈中没有任何内容。