gpt4 book ai didi

c# - 如何合并不同 switch case 下的方法调用,使代码通用或优化?

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:17 28 4
gpt4 key购买 nike

我有一个从数据库中获取员工信息的方法。方法如下,带一个switch case

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();
}

下面是支持类和Enum

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”?

最佳答案

以下不是完整的解决方案;但足以帮助您实现目标。想法是:根据用户搜索条件,使用 lambda 表达式语法创建表达式树。在存储库中的 final方法中,您可以传递该表达式并解析它(比如获取数据库 sql 查询)以从数据库中获取信息。

public class Program
{
static void Main()
{
GetEmployeeInfoFromDatabase((e) => e.EmployeeEmail == "UserProvidedEmailAdderessGoesHere");
}

public EmployeeStandardInfoResponse static GetEmployeeInfoFromDatabase(Expression<Func<Employee,bool>> exprssion)
{
/* parse this exression to build query*/
/* use as it is if using entity framework*/
}
}

class Employee
{
public int EmployeeId { get; set; }
public string EmployeeEmail { get; set; }
}
}

this 的第二个/第三个答案stack over flow 帖子精美地描述了查询翻译逻辑的表达式。

您可以继续并进一步使其更具可重用性和通用性(不仅限于 Employee 实体)

public EmployeeStandardInfoResponse static GetEmployeeInfoFromDatabase<T>(Expression<Func<T,bool>> exprssion)
{
/* parse this expression to build query*/
/* use as it is if using entity framework*/
}

关于c# - 如何合并不同 switch case 下的方法调用,使代码通用或优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879678/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com