高级类型推断

Advanced Type Inference

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

我想做:

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

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

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

我想避免做类似 Get<MyObject, int>(1);

的事情

编辑:

以后有谁看到这个,问过类似的问题here and here

不,在 C# 中无法执行此操作。您本质上要求的是能够明确指定一些通用参数并推断其余参数。这在 C# 中不受支持;需要对所有或 none 个通用参数进行通用类型推断。

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

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

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