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

时间:2009-09-19 21:26:02

标签: 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();
    }
}

我想如何使用它:

Event ev = Event.Get(EventId)

,其中Event继承EntityBase。

该方法自行编译,就像它一样,但如果我想以这种方式使用它,我会收到一条错误消息:

  

无法从用法推断出方法'RiotingBits.Data.Entities.EntityBase.Get(int)'的类型参数。尝试明确指定类型参数。

我知道我可以像Event.Get<Event>(EventId)一样使用它,但我真的想用'我的方式'。该方法的代码无关紧要,我怀疑可能有一种方法可以提示该方法如何推断出正确的类型。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

我不这么认为。我认为只根据方法的参数推断出类型。所以我认为你坚持明确指定类的类型。有关详细信息,请参阅MSDN