2014-12-03 1 views
0

Мне нужно добавить объект в список. но во-первых, я должен проверить, действительно ли этот объект (свойство object.name) уже существует в списке и выполняет некоторые другие тесты. все это прекрасно работает, но я должен делать это с разными объектами и их списками. поэтому я хотел бы иметь метод, который принимает объект и список как параметры, и делает всю магию независимо от типа объекта и списка.Добавить объект в список в пределах метода, независимо от того, какой тип они

, что я до сих пор:

список и объект:

ProductList = new ObservableCollection<Product>(); 
private Product _newProduct = new Product(); 
public Product NewProduct 
{ 
    get { return _newProduct; } 
    set 
    { 
     if (_newProduct == value) 
      return; 
     _newProduct = value; 
     RaisePropertyChanged("NewProduct"); 
    } 
} 

поиск, если объект существует:

bool productFound = false; 
for (int i = 0; i < ProductList.Count; i++) 
{ 
    if (ProductList[i].Name == NewProduct.Name) 
    { 
     productFound = true; 
     break; 
    } 
} 

после некоторых других тестов, объект добавляется к списку:

ProductList.Add(NewProduct.Clone()); 

вместо того, чтобы писать этот код для всех моих списков (5 разных типов), я хотел бы вызвать метод и передать объект и список. затем метод выполняет тесты и добавляет объект в список, независимо от того, какой тип они есть. Как я могу это сделать?

я ищу что-то вроде этого:

Save(NewProduct, ProductList); 

ответ

1

Declare интерфейс и реализовать его во всех субъектах вам нужно:

код
interface INamedEntity : ICloneable 
{ 
    stirng Name { get; } 
} 

class Product : INamedEntity { /* ... */ } 

Затем вы можете переписать так:

void Save<T>(List<T> entities, T entity) 
    where T: INamedEntity 
{ 
    // searching if the object does exist: 
    var isExists = entities.Any(e => e.Name == entity.Name); 

    // after some other tests, the object is added to the list: 
    entities.Add(entity.Clone()); 
} 
+0

что сокращает мой поисковый код, но он не отвечает на мой вопрос? Я ищу способ добавить объект в список. но я должен делать это с разными объектами и их списками. поэтому я хотел бы иметь способ сделать это. в противном случае я должен скопировать много кода для каждого случая. –

+0

См. Обновленный ответ. – Dennis

+0

Я получаю сообщение об ошибке: 'ObservableCollection' не имеет реализации' Any' –

1

Вы можете использовать интерфейс, который ч имеет общие свойства и методы

interface IItem 
{ 
    public string Name {set; get;} 
} 

тогда ваши классы должны реализовывать интерфейс, например

class Product: Item { ...} 

Теперь вы можете использовать следующий общий метод для сохранения элементов

public void Save(IItem item, List<IItem> list) 
{ 

    if (!list.Any(x => x.Name == item.Name)) 
     list.Add(item); 
} 
+0

Можете ли вы опубликовать простой пример? –

+0

@ el-nino, я привел пример в своем ответе – Ahmad

 Смежные вопросы

  • Нет связанных вопросов^_^