有可能重构这个使用泛型吗?

时间:2009-12-02 15:13:24

标签: c# generics overloading

使用LINQ to Entities,我有以下代码:

public Foo GetFooByID(int id)
{
 return _db.Foo.First(m => m.ID == id);
}

public Bar GetBarByID(int id)
{
 return _db.Bar.First(m => m.ID == id);
}

有没有办法使用泛型来重构这个?

2 个答案:

答案 0 :(得分:2)

您可以执行类似LINQ to SQL DataContext.GetTable方法的操作:

public T GetById<T>(int id)
{
  return _db.GetTable<T>().First(m => m.ID = id);
}

然后你会这样称呼它:

GetById<Foo>(10);
GetById<Bar>(10);

答案 1 :(得分:0)

您首先需要在Foo上抽象对属性Bar_db的访问权限。然后通用部分变得非常简单。

public T GetByID<T>(int id) 
{
 return _db.GetCollection<T>().First<T>(m => m.ID == id);
}

如果编译器抱怨,您可能需要将T约束为具有ID属性的类型。

public T GetByID<T>(int id) where T : IHaveID
{
}