Я создал метод IEnumerable, который принимает IEnumerable типа PERSON, который меняет местами имена и фамилии сотрудника (они в настоящее время добавляют их в базу данных в одном поле («Джон Смит», «Крэйг Робертсон») и т.д.Создание метода типа IEnumerable, который принимает общий тип
у меня есть еще один IEnumerable называется ProjectPerson, который имеет сходные, но иные данные, которые я хотел бы поменять имя и фамилию как хорошо.
Оба IEnumerables имеют «Имя» в качестве поля, поэтому код работает отлично для обоих, я просто хочу иметь возможность повторно использовать этот код, не создавая перегрузки с IEnumerabe<Person>
, а другой с IEnumerable<ProjectPerson>
но один и тот же код внутри каждого.
Есть ли способ настроить метод IEnumerable, который может использоваться различными типами? Может быть, передать в Типе аргумент, а затем бросить?
Я создал интерфейс под названием IPerson:
public interface IPerson
{
string Name { get; set;}
}
и у меня есть следующие:
public class Person: IPerson {..}
public class ProjectPerson: IPerson {..}
Мой метод выглядит следующим образом:
private void IEnumerable<IPerson> SwapFirstAndLastNames(IEnumerable<IPerson> persons)
{
foreach (var employee in persons)
{
//do the swapping
}
return persons;
}
Я звоню этот метод в другом месте класса, используя следующие две строки:
_projectPerson = SwapFirstAndLastNames(projectpersons)
_person = SwapFirstAndLastNames(person);
Использование вышеизложенного я получаю сообщение об ошибке «Невозможно преобразовать из ProjectPerson в IPerson (аналогично с Person to IPerson), а также« Наилучшее соответствие метода перегрузки для SwapFirstAndLastNames (IEnumerable) имеет некоторые недопустимые аргументы.
Оба человека и projectPerson имеют тип IENumerable (как и подчеркнутые), а используемые в каждом из них данные используются в других местах для заполнения датагрид и т. П. Поэтому я в основном ищу один метод, который принимает любой тип IEnumerable, меняет область IEnumerable.Name (у меня уже есть код, чтобы сделать это), а затем возвращает измененные данные IEnumerable. У меня есть работа над одним типом.
Вы были первым с этим ответом, мне интересно, почему это не поддерживается –
+1, но, как вы уже упоминали, дженерики вообще не нужны. –
@TimSchmelter Я согласен, увидев ваш ответ, общий соответствует оригинальному шаблону OP, но нет необходимости в нем, если вы используете интерфейс. Однако я не хотел редактировать мои, чтобы соответствовать вашим, или мы просто закончим с дублирующимися ответами! – Liath