【发布时间】:2018-02-20 07:13:13
【问题描述】:
我有一个从数据库中获取员工信息的方法。方法如下,带开关盒
public void RetrieveEmployeeInfo(EmployeeInfoRequest request)
{
EmployeeStandardInfoResponse response;
int employeeId;
switch (request.Type.ToLowerInvariant())
{
case "employeeid":
//Some Logic
response = GetEmployeeInfoFromDatabase(EmployeeSearchType.ByEmployeeID, employeeId);
break;
case "emailaddress":
//Some Logic
response = GetEmployeeInfoFromDatabase(EmployeeSearchType.ByEmailAddress, emailAddress:request.Id);
break;
default:
return null;
}
return response;
}
“GetEmployeeInfoFromDatabase”的签名是
public EmployeeStandardInfoResponse GetEmployeeInfoFromDatabase(EmployeeSearchType employeeSearchType, dynamic value)
{
//For simplicity I am returning employee info here
return new EmployeeStandardInfoResponse();
}
以下是支持类和枚举
public enum EmployeeSearchType
{
ByEmployeeID = 1,
ByEmailAddress = 2
}
public class EmployeeInfoRequest
{
public int Id;
public string Type;
}
public class EmployeeStandardInfoResponse
{
public int employeeReferenceId;
public string employeeDepartment;
public string employeePfDetails;
public string employeeName;
public string employeeEmailAddress;
public string employeeAddress;
}
如何使 switch case 通用,这样我就不必在每种情况下都调用方法“GetEmployeeInfoFromDatabase”?
【问题讨论】:
-
只需将
employee或emailAddress:request.Id存储在变量中(顺便说一句:shopuld 这是一个可选的命名参数吗?它不在方法签名中)因此不会编译)并在两次切换后调用该方法。无论如何,这听起来像是一篇评论,很可能会转到codereview.stackexchange.com -
除此之外,我看不出您的代码有什么问题。这很容易理解并完成工作。你还期待什么?
-
@HimBromBeere 你是对的。最初我将调用设为可选,但后来在修改后我想在调用 GetEmployeeInfoFromDatabase 时使用动态
-
另外,EmployeeSearchType (enum) 在这两种情况下是不同的。因此,我正在寻找的是,在做出决定时,我应该能够动态/一般地更改 EmployeeSearchType.ByEmployeeID 或 EmployeeSearchType.ByEmailAddress
-
@ThementalistCoder 你如何连接到 db - ado.net,实体框架?
标签: c# generics switch-statement