如何将我的方法更改为泛型方法?我的代码有什么问题
本文关键字:我的 代码 泛型方法 什么 问题 方法 | 更新日期: 2023-09-27 18:34:20
我有3个叫做Student,Worker,People
的类,可能来自不同的项目。它们都具有两个相同的属性:name,age
。现在当我想把People
改成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
};
}
通用方法:如何解决?
public static T ChangePeopleToWorker<T>(People people)
where T : Student, Worker,new T()
{
return new T
{
Name = people.Name,
Age = people.Age
};
}
创建一个接口(或基类 - 我在我的示例中假设一个接口),例如:
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
};
}
.
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; }
}