方法就是这个,EntityBase.Get:
public class EntityBase
{
public int Id;
public static T Get<T>(int id) where T : EntityBase
{
DataContextExtender extender = new DataContextExtender();
return extender.DataContext.GetTable<T>().Where(t => t.Id == id).FirstOrDefault();
}
}
我想如何使用它:
Event ev = Event.Get(EventId)
,其中Event继承了EntityBase。
该方法本身会自行编译,但如果我想以这种方式使用它,我会收到一条错误消息:
The type arguments for method 'RiotingBits.Data.Entities.EntityBase.Get(int)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
我知道我可以像Event.Get<Event>(EventId)
那样使用它,但我真的很想以“我的方式”使用它。该方法的代码并不重要,我怀疑可能有一种方法可以提示该方法如何推断正确的类型。
不,你不能。 C# 中的类型推断不会考虑您尝试对返回值执行的操作,也不会考虑您用来引用静态方法的类。类型推断非常复杂,但最终归结为您用来调用该方法的参数的静态类型。
如果您只想在单一类型 ( Event
) 中执行此操作,您总是可以创建一个新的 GetEvent
Event
中的静态方法,它刚刚调用了 Get<Event>
.
我是一名优秀的程序员,十分优秀!