高级类型推理
本文关键字:推理 类型 高级 | 更新日期: 2023-09-27 18:37:02
我希望编译器为我推断出一种类型,但不确定是否可能,或者最好的选择是什么。
我想做:
public static TValue Get<TValue>(TKey key) where TValue : Mapped<TKey> { ... }
public class MyObject : Mapped<int> { ... }
并让 C# 推断TKey
是一个int
。有没有办法做这样的事情?如果没有,最好的选择是什么?
我想避免做类似Get<MyObject, int>(1);
编辑:
对于将来看到这种情况的任何人,这里和这里都提出了类似的问题
不,在 C# 中没有办法做到这一点。 您本质上要求的是能够显式指定一些通用参数并推断其余参数。 这在 C# 中不受支持;需要对所有泛型参数或不对泛型参数进行泛型类型推断。
@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);