我希望编译器为我推断出一种类型,但我不确定它是否可行,或者最佳替代方案可能是什么。
我想这样做:
public static TValue Get<TValue>(TKey key) where TValue : Mapped<TKey> { ... }
public class MyObject : Mapped<int> { ... }
让C#推断TKey
是int
。有没有办法做这样的事情?如果没有,最好的替代方案是什么?
我想避免做Get<MyObject, int>(1);
修改
答案 0 :(得分:7)
不,在C#中无法做到这一点。您基本上要求的是能够明确指定一些通用参数并推断其余参数。 C#不支持这种情况;需要对所有通用参数进行泛型类型推断。
答案 1 :(得分:3)
@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);