2009-12-08 2 views
0

У меня есть 2 объекта проекта и лицензии. Они оба наследуют объект Entity (абстрактный класс).Как создать гибкий метод расширения для общих списков?

Теперь у меня есть метод расширения «GetNewId», который содержит логику, чтобы получить следующий идентификатор в списке сущностей.

Я определил этот метод как метод расширения, но проблема в том, что List (который также является списком сущностей), а List не видит этот метод.

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

Есть ли решение этой проблемы?

редактировать: работать в C#

+1

О каком языке программирования вы говорите? – Avi

ответ

3

Какого класса/интерфейс вашего метода GetNewId() расширение?

Если вы сделаете это расширение IEnumerable<T> - где Т ограничено, происходит от вашего Entity базового класса - вы должны быть в состоянии использовать метод расширения на любой коллекции, как класс, содержащий Entity объектов на основе:

public static GetNewId<T>(this IEnumerable<T> sequence) where T : Entity { 
    // your implementation of GetNewId here 
} 

Метод Cast (от System.Linq) также определен на IEnumerable<T> (но на любом типе T, без ограничений), поэтому вы можете использовать его на своем licenses экземпляре.

+0

В вашем примере содержится «Tedu.LicenseWebsite.Core.Model.Entity». Вы знаете о 'use' statement и namespaces ...? – peSHIr