我必须向最终用户提供搜索功能,为此,我提供了一个下拉列表和一个文本框,该下拉列表具有诸如EmployeeID,DisplayName,City之类的选项,选择下拉列表值后,他需要在文本框中输入一个值
如果用户选择EmployeeID,则该值将为Int类型;如果用户选择姓名或城市,则该值将为字符串类型。
Public Employee getEmpInfo(object querystring, object queryvalue)
{
// code to get the empplyee info
}
我想知道是否有比使用对象类型更好的方法?
答案 0 :(得分:3)
您可以像这样重载您的方法:
如果您的参数为int:
public Employee getEmpInfo(int employeeId){
// query by ID
}
或字符串
public Employee getEmpInfo(string employeeName){
// query by name
}
然后,如果您提供字符串,则第二个将被程序使用,否则第一个将被使用。您都可以在文件中编写这些功能。这称为方法重载。
参考:
https://www.geeksforgeeks.org/c-sharp-method-overloading/
https://www.tutorialspoint.com/What-is-method-overloading-in-Chash
另一方面,如果要使用一个功能来搜索所有类型:
public class SearchParams {
public int ID;
public string Name;
public string City;
public SearchParams(int ID = null, string Name = null, string City = null)
{
this.ID = ID;
this.Name = Name;
this.City = City;
}
}
public function getEmpInfo(SearchParams params){
// build query by that parameters
if(ID != null){
// add query by ID
}
}
答案 1 :(得分:1)
可以通过在界面中添加和绑定所有属性的控件并根据组合框中的选定属性名称(仅显示选定属性的控件)来解决此问题。
这种方法可以为某些属性提供非常具体的控件,而不必将所有内容强制输入字符串。
如何完成此操作取决于UI技术(Web,WinForms,WPF等)
答案 2 :(得分:1)
我认为您的方法是错误的。
如果按姓名,ID或出生日期搜索员工,则执行完全不同的操作和SQL操作。
对于每种可能性,您都应该拥有一种方法的版本,以便在每种方法中执行一组特定的操作。
如果基于重写中的参数类型创建单个方法,则当您具有相同类型的不同列时,可能会遇到麻烦。
这是错误的(甚至无法编译):
public Employee GetEmployee(int id)
{
//Instructions..
}
public Employee GetEmployee(string name)
{
//Instructions..
}
public Employee GetEmployee(string city)
{
//Instructions..
}
这将支持所有可能性并保持可读性:
public Employee GetEmployeeByID(int id)
{
//Instructions..
}
public Employee GetEmployeeByName(string name)
{
//Instructions..
}
public Employee GetEmployeeByCity(string city)
{
//Instructions..
}