我有两个Model
个类,一个是Person
,另一个是Department
。我想要实现的是我想创建一个通用函数,该函数可用于以List
的形式检索泛型类型数据,例如一个电话将返回Person List
,另一个电话将返回Department List
。更具体地说,我想以List的形式返回数据。
以下是Person
类。
public class Person {
public Int16 Personid{ get; set; }
public string Personname { get; set; }
public string Personaddress { get; set; }
}
以下是Department
类。
public class Department {
public Int16 Departmentid { get; set; }
public string Departmentname { get; set; }
public string Departmentsection { get; set; }
}
以下是调用功能,其中一次我使用CallingMethodPerson()
拨打电话,另一次使用CallingMethodDepartment()
拨打电话。
public class CallingClass {
public void CallingMethodPerson() {
CalledClass calling = new CalledClass();
Calling. CalledMethod();
}
public void CallingMethodDepartment() {
CalledClass calling = new CalledClass();
Calling. CalledMethod();
}
}
以下蓝图是CalledClass
,它会执行一些操作并返回Person
或Department
的列表。
public class CalledClass {
public void CalledMethod() {
//this is a generic method wherein returns the list of either a Person
or Department whenever called.
}
}
总结一下,我想实现一个返回泛型类型数据的通用函数。诀窍实际上我想构建一个具有SQL Read command
的通用函数,所以我将使用不同的模型一次又一次地调用相同的函数,执行查询,从database
检索数据,存储它进入list
类型泛型并返回callingmethod
。
答案 0 :(得分:0)
您的CalledClass应接受T为通用。
您的人员和部门都应至少具有接口和接口(如果您需要对这些对象执行操作。)
public class CalledClass<T> where T : IAmAClassObject {
public List<T> CalledMethod() {
//create your objects and do something
return objects.ToList();
}
}
另一种处理方法是使CalledMethod句柄成为泛型 公共类CalledClass {
public List<T> CalledMethod<T>() {
//create your objects and do something
return objects.ToList();
}
}
这样你应该在CallingClass类中实例化一次CalledClass,然后调用CallMethod给出正确的T类型。
答案 1 :(得分:0)
看起来您可以从实体框架中受益。它具有您需要的方法,使用DbContext
,DbSet<T>
和Linq-to-sql进行调用。
答案 2 :(得分:0)
执行此操作的正确语法如下:
public class CalledClass<T>
{
public List<T> CalledMethod()
{
return objects.ToList();
}
}
但这不允许您修改列表条目,因为类型为object
。
巡视示例显示您的对象非常相似,因此我建议您提取一个通用界面:
Person
和Department
此类信息已在课程这将为您留下以下层次结构
public interface IEntity
{
string Name {set;get;}
string Id {set;get;}
}
public class Person : IEntity
{
string Name {set;get;}
string Id {set;get;}
string Address {set;get;}
}
public class Department : IEntity
{
string Name {set;get;}
string Id {set;get;}
string Section {set;get;}
}
现在,您可以添加一个约束,您的泛型函数只接受IEntity
public class CalledClass<TEntity>
where TEntity : IEntity
{
public List<TEntity> CalledMethod()
{
// You can access Name and Id here
foreach(var entity in entities) // i know the code is not useful ;)
entity.Id = "Unique ID"; // only for demonstration purposes
entity.Name = "Random Name";
}
return entities.ToList();
}
}