【问题标题】:Is is possible to make a generic method with two type arguments only infer one of them?是否可以使用两个类型参数仅推断其中一个的泛型方法?
【发布时间】: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# 不能从约束中推断类型,因此不可能同时推断 TInTOut,这对吗?

【问题讨论】:

  • 你可以把它放到一个静态泛型类MyClass<ClassOut>然后你只需要指定ClassOut因为方法会被推断出来
  • 这能回答你的问题吗? Partial generic type inference possible in C#?
  • @Charlieface 似乎没有。它看起来像一个不同的故事,因为我不使用扩展并且答案使用this 参数来推断类型。另外,我的问题还不够清楚,ClassOut 不是一个固定的类,而更像是一个类型参数。
  • 类似的问题,它是由相同的编译器问题引起的。但也许这个链接更好stackoverflow.com/questions/10719557/…

标签: c# generics


【解决方案1】:

是的,您总是需要同时指定这两种类型。类型推断仅在您指定所有类型参数时才有效。

是的,C# 编译器无法根据约束推断类型。它只能根据您作为参数传入的类型来推断类型。

在旁注中,there is an open issue 关于改进这方面的类型推断,但它似乎没有高优先级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2011-01-16
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多