【发布时间】:2021-12-27 03:12:20
【问题描述】:
我有一个类似public static TOut Method<TIn, TOut>(TIn in) 的方法,带有约束where TIn: class, Interface<TOut>。
当我使用它时,我是否总是需要写Method<ClassIn, ClassOut>(ObjectIn);,或者有什么方法可以通过参数推断TIn,所以我只需要写Method<ClassOut>(ObjectIn);? ClassOut 不时变化,所以我不能每次都为它编写一个静态类。
另外,C# 不能从约束中推断类型,因此不可能同时推断 TIn 和 TOut,这对吗?
【问题讨论】:
-
你可以把它放到一个静态泛型类
MyClass<ClassOut>然后你只需要指定ClassOut因为方法会被推断出来 -
@Charlieface 似乎没有。它看起来像一个不同的故事,因为我不使用扩展并且答案使用
this参数来推断类型。另外,我的问题还不够清楚,ClassOut不是一个固定的类,而更像是一个类型参数。 -
类似的问题,它是由相同的编译器问题引起的。但也许这个链接更好stackoverflow.com/questions/10719557/…