Можно ли рефакторинг это использовать дженерики? - PullRequest
1 голос
/ 02 декабря 2009

Используя 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 ]

2 голосов
/ 02 декабря 2009

Вы можете сделать что-то вроде 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);
0 голосов
/ 02 декабря 2009

Сначала вам нужно будет абстрагироваться от доступа к свойству 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
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...