假设我有两个班级:学生和老师。 我想创建一个泛型方法,它将返回两个类之一的列表,基于作为参数传递的类型。
class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string BloodGroup { get; set; }
public string Address { get; set; }
}
class Teacher
{
public int Id { get; set; }
public string Name { get; set; }
public string BloodGroup { get; set; }
public string Address { get; set; }
}
class GenericClassTest
{
public List<T> getInformation<T>(List<T> infos )
{
var infoList = new List<T>(); // It's not working
foreach (T item in infos)
{
T info = new T();
info.Id = item.Id;
info.Name = item.Name;
info.BloodGroup = item.BloodGroup;
info.Address = item.Address;
infoList.Add(info);
}
return infoList;
}
}
如何实例化应该代表Student和Teacher类的 T 。我希望能够进行以下调用:
getInformation<Student>(studentList);
getInformation<Teacher>(teacherList);
答案 0 :(得分:3)
我会添加一个学生和教师都继承自的父类。然后,您可以将方法的泛型参数限制为该父类型。您可能还需要在getInformation()方法中完成更多工作,但这应该可以帮到您:
class Person
{
public Person()
{
}
public int Id { get; set; }
public string Name { get; set; }
public string BloodGroup { get; set; }
public string Address { get; set; }
}
class Student : Person
{
//unique Student properties go here
}
class Teacher : Person
{
//unique teacher properties go here
}
class GenericClassTest
{
public List<T> getInformation<T>(List<T> infos )
where T : Person, new()
{
var infoList = new List<T>(); // It's not working
foreach (T item in infos)
{
T info = new T();
info.Id = item.Id;
info.Name = item.Name;
info.BloodGroup = item.BloodGroup;
info.Address = item.Address;
infoList.Add(info);
}
return infoList;
}
}
答案 1 :(得分:1)
我相信你正在寻找interface。通过接口,您可以访问相同类的方法和属性,而无需知道它是哪一个。
public interface ICantThinkOfAGoodName
{
public int Id { get; set; }
public string Name { get; set; }
public string BloodGroup { get; set; }
public string Address { get; set; }
}
然后您可以这样调用您的方法:
getInformation<ICantThinkOfAGoodName>(studentList);
但是,我建议删除您创建的泛型类,而只是使用List。您可以查看对象,并在不知道对象是学生还是教师的情况下进行编辑。