如何将我的方法更改为泛型方法?我的代码出了什么问题?

时间:2014-12-16 16:40:00

标签: c# c#-4.0 generics c#-3.0

我有3个名为Student,Worker,People的类,它们可能来自不同的项目。所有类都有两个相同的属性:name,age。现在当我想将People更改为{{1我必须编写一个名为Student的方法,当我想将ChangePeopleToStudent更改为People时,我必须编写一个名为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
           };
       }

2 个答案:

答案 0 :(得分: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
   };
}

答案 1 :(得分:2)

.NET不支持多重继承,因此where T : Student, Worker不是合理的条件。如果您希望T StudentWorker,则需要定义公共基类(或接口),或者定义两种不同的方法。

如果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; }
   }