【问题标题】:Advanced Type Inference高级类型推断
【发布时间】:2015-01-09 20:50:21
【问题描述】:

我希望编译器为我推断出一个类型,但我不确定这是否可能,或者最好的选择可能是什么。

我想做:

public static TValue Get<TValue>(TKey key) where TValue : Mapped<TKey> { ... }

public class MyObject : Mapped<int> { ... }

并让 C# 推断 TKeyint。有没有办法做这样的事情?如果没有,最好的选择是什么?

我想避免像Get&lt;MyObject, int&gt;(1);这样的事情

编辑:

对于将来看到此内容的任何人,herehere 已提出类似问题

【问题讨论】:

标签: c# generics


【解决方案1】:

不,在 C# 中没有办法做到这一点。您本质上要求的是能够显式指定一些通用参数并推断其余参数。这在 C# 中不受支持;需要对所有泛型参数进行泛型类型推断或不进行泛型类型推断。

【讨论】:

    【解决方案2】:

    @Servy 是正确的,但正如在其他线程中指出的那样,有时您可以拆分类型以使事情可推断。

    在本例中,我们在类声明中指定不可推断类型,在方法声明中指定可推断类型。

    public static class InferHelper<TValue>
        where TValue : class
    {
        public static TValue Get<TKey>(TKey key)
        {
            // do your magic here and return a value based on your key
            return default(TValue);
        }
    }
    

    你这样称呼它:

    var result = InferHelper<MyObject>.Get(2);
    

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多