Как изменить мой метод на общий? Что не так с моими кодами?

1

У меня есть 3 класса под названием " Student,Worker,People которые могут поступать из разных проектов. Все из них имеют одно и то же свойство: name,age Теперь, когда я хочу изменить " People к Student, мне нужно написать метод ChangePeopleToStudent, когда Я хочу изменить People to Worker, мне нужно написать метод под названием ChangePeopleToWorker Я пытаюсь использовать общие методы для записи только одного метода, но кажется неправильным. Как его исправить?

Три классифицированных

public class  Student
       {
           public string Name { get; set; }
           public int Age { get; set; }
           public int MathPoint { get; set; } 
       }
       public class Worker
       {
           public string Name { get; set; }
           public int Age { get; set; }
           public string WorkPlace { get; set; }
       }
       public class People
       {
           public string Name { get; set; }
           public int Age { get; set; }
           public string Country { get; set; }
       }

Мой метод изменения

 public static Student ChangePeopleToStudent(People people)
       {
           return new Student
           {
               Name = people.Name,
               Age = people.Age
           };
       }
       public static Worker ChangePeopleToWorker(People people)
       {
           return new Worker
           {
               Name = people.Name,
               Age = people.Age
           };
       }

Общие методы: как это исправить?

public static T ChangePeopleToWorker<T>(People people)
           where T : Student, Worker,new T()
       {
           return new T
           {
               Name = people.Name,
               Age = people.Age
           };
       }
  • 1
    Уверен, вы не можете сказать, where T: SomeClass, SomeUnrelatedClass и как это работает. Вы бы никогда не выполнили оба условия.
  • 0
    Вам нужно создать общий базовый класс или интерфейс (который содержит имя и возраст) и сделать так, чтобы ваши различные классы наследовали от него. Затем используйте этот базовый класс для универсального метода, where T : SomeBaseClass .
Теги:
generics
c#-4.0
c#-3.0

2 ответа

4
Лучший ответ

Создайте интерфейс (или базовый класс - я предполагаю интерфейс в моем примере), например:

public interface IPerson
{
    string Name { get; set; }
    int Age { get; set; }
}

Он должен быть реализован всеми вашими классами. Тогда вы сможете написать:

public static T ChangePersonTo<T>(IPerson person)
where T : IPerson, new T()
{
   return new T
   {
       Name = person.Name,
       Age = person.Age
   };
}
  • 0
    Класс person - это json из другого проекта, называемого проектом A, и он не имеет интерфейса, я могу только сериализовать его в проекте B. Возможно, мне следует создать интерфейс.
2

.NET не поддерживает множественное наследование, поэтому, where T: Student, Worker не является правдоподобным. Если вы хотите, чтобы T был либо Student либо Worker вам нужно определить общий базовый класс (или интерфейс) или определить два разных метода.

Если People должны быть общим классом между двумя, вы можете упростить свои занятия:

   public class  Student : People
   {
       public int MathPoint { get; set; } 
   }
   public class Worker : People
   {
       public string WorkPlace { get; set; }
   }
   public class People
   {
       public string Name { get; set; }
       public int Age { get; set; }
       public string Country { get; set; }
   }
  • 0
    Люди из другого проекта и передают его через строку json. Если я использую ваши коды, это кажется неправильным, поскольку у студента и работника нет свойства, называемого «Страна».
  • 0
    @ Лили Это был просто пример - это может не подходить к вашему случаю. Дело в том, что вам нужен базовый класс или интерфейс.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню