我有一个类,我想为该类添加一个泛型方法,每次调用时都返回一个相同的对象.但方法参数可以是不同的对象.无论参数是什么,但方法应始终返回相同的对象类型. 创建此方法的目的是我想
创建此方法的目的是我想调用一个API,我需要将JSon序列化对象发送给它.每次我调用API时,它都会在他们的服务中创建一个新客户. API服务只有一个客户类型对象.但在我的应用程序中,我有两种类型的对象(例如:学生,教师)API不关心我是否正在发送学生对象或教师对象.这两个对象都是API透视图中的客户.
因此,当我调用API时,我需要创建公共客户对象以传递给API.但我在我的应用程序中有两个对象,我想编写一个接受Student和Teacher对象的方法,但返回一个客户对象.
这是泛型的可能吗?或者任何其他方式使这简单而有效?
请参阅下面的示例代码.
public static Customer CreateCustomer<T>(T data)
{
var customer = new Customer()
{
CustomerNo = 1,
CustomerName = "Test",
CustomerContact = new CustomerContact()
{
CustomerContactName = "Test",
CustomerContactEmail = "test@test.com",
CustomerContactPhone = "011111111"
},
PrimaryAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
},
BillingAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
}
};
return customer;
}
public class Teacher
{
public long TeacherID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Subject Subjects { get; set; }
public string Email{ get; set; }
public string ContactNO{ get; set; }
public Address PrimaryAddress { get; set; }
public Address SecondaryAddress { get; set; }
}
public class Student
{
public long StudentID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Email{ get; set; }
public string ContactNO{ get; set; }
public Address PrimaryAddress { get; set; }
public Address SecondaryAddress { get; set; }
public string Grade { get; set; }
public int Level { get; set; }
}
T数据可以是学生或教师.我想替换此数据对象中的硬编码值.可能吗?
首先编写看起来像你的泛型类public class CustomerService<T> where T : class
{
public static Customer CreateCustomer(T data)
{
Customer customer = new Customer();
if (typeof(T) == typeof(Student)) //We just check here is data comes from api is of type Student
{
Student student = (Student)(object)data; //then cast this data to Student
customer = new Customer()
{
CustomerNo = student.StudentID, // Convert.ToInt32(student.StudentID),
CustomerName = student.FirstName,
//Assign all your remaining customer properties with desired values
CustomerContact = new CustomerContact()
{
CustomerContactName = "Test",
CustomerContactEmail = "test@test.com",
CustomerContactPhone = "011111111"
},
PrimaryAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
},
BillingAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
}
};
}
if (typeof(T) == typeof(Teacher)) //We just check here is data comes from api is of type Teacher
{
Teacher teacher = (Teacher)(object)data; //then cast this data to Teacher
customer = new Customer()
{
CustomerNo = teacher.TeacherID, // Convert.ToInt32(teacher.TeacherID),
CustomerName = teacher.FirstName,
//Assign all your remaining customer properties with desired values
CustomerContact = new CustomerContact()
{
CustomerContactName = "Test",
CustomerContactEmail = "test@test.com",
CustomerContactPhone = "011111111"
},
PrimaryAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
},
BillingAddress = new CustomerAddress()
{
Street = "Hill street",
ZipCode = "16962",
City = "New york",
Country = "USA"
}
};
}
return customer;
}
}
您可以根据需要在上述方法中使用if-if或if-else-if.
从你的api控制器动作调用你的CreateCustomer泛型方法
学生数据或教师数据来自您的前端
[HttpPost]
//public IHttpActionResult GetCustomer([HttpPost]Teacher teacher)
public IHttpActionResult GetCustomer()
{
Teacher teacher = new Teacher { TeacherID = 12, FirstName = "Vijay" }; //this teacher data comes from front end or from caller of this api
Customer customer1 = CustomerService<Teacher>.CreateCustomer(teacher);
return Ok(customer1);
}
要么
[HttpPost]
//public IHttpActionResult GetCustomer([HttpPost]Student student)
public IHttpActionResult GetCustomer()
{
Student student = new Student { StudentID = 11, FirstName = "Kunal" }; //this student data comes from front end or from caller of this api
Customer customer2 = CustomerService<Student>.CreateCustomer(student);
return Ok(customer2);
}
结果
老师作为客户:
学生作为客户:
