我可以修改这种泛型方法,而不会失去(我的宗教信仰)我想要的用法风格吗?

Dan*_*tru 1 c# generics

方法就是这个,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),但我真的想用它'我的方式'.该方法的代码无关紧要,我怀疑可能有一种方法可以提示该方法如何推断出正确的类型.

Jon*_*eet 8

不,你不能.C#中的类型推断不会考虑您尝试对返回值执行的操作,也不会考虑您用于引用静态方法的类.类型推断非常复杂,但最终归结为您用于调用方法的参数的静态类型.

如果您只想在单个类型(Event)中执行此操作,则可以始终创建一个刚刚调用的新GetEvent静态方法.EventGet<Event>