方法就是这个,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();
}
}
Run Code Online (Sandbox Code Playgroud)
我想怎么用它:
Event ev = Event.Get(EventId)
Run Code Online (Sandbox Code Playgroud)
,其中Event继承EntityBase.
该方法自行编译,就像它一样,但如果我想以这种方式使用它,我会得到一条错误消息:
无法从用法推断出方法'RiotingBits.Data.Entities.EntityBase.Get(int)'的类型参数.尝试显式指定类型参数.
我知道我可以使用它Event.Get<Event>(EventId),但我真的想用它'我的方式'.该方法的代码无关紧要,我怀疑可能有一种方法可以提示该方法如何推断出正确的类型.
不,你不能.C#中的类型推断不会考虑您尝试对返回值执行的操作,也不会考虑您用于引用静态方法的类.类型推断非常复杂,但最终归结为您用于调用方法的参数的静态类型.
如果您只想在单个类型(Event)中执行此操作,则可以始终创建一个刚刚调用的新GetEvent静态方法.EventGet<Event>