public class BaseClass{
public static T Find<T>(object value){
-- db.get<T>("params", value);
}
}
public class Derived: BaseClass{
}
...
void someMethod(){
Derived obj = Derived.Find<Derived>(1);
}
在上面的代码中,如何将Derived obj = Derived.FindDerived<Derived>(1);
更改为Derived obj = Derived.Find(1);
答案 0 :(得分:4)
如果您的方法签名是这样的
public static T Find<T>(T value)
然后你可以省略方法调用中的类型。但是,根据您给定的签名,编译器无法在不明确说明类型的情况下推断出类型。
答案 1 :(得分:2)
在许多情况下,编译器可以识别类型参数,但可以省略它们,但并非在所有情况下都省略。我认为返回值只是一个不受支持的情况,因为返回值不是方法签名的一部分。
Here是Eric Lippert关于类似问题的博文。
答案 2 :(得分:2)
您可以通过将BaseClass更改为泛型类来消除它:
public class BaseClass<T> {
public static T Find(object value){
-- db.get<T>("params", value);
}
}
public class Derived: BaseClass<Derived> {
void someMethod(){
Derived obj = Derived.Find(1);
}
}