C# 使用if和几个else-if重构业务逻辑

C# 使用if和几个else-if重构业务逻辑,c#,if-statement,C#,If Statement,我有一个方法返回员工职位列表list listPositions。如果方法只返回一个字符串,则基本逻辑如下: if (listPositions.Contains("Admin")) { // business logic 1,for example Console.WriteLine("I'm Admin"); } else if (listPositions.Contains("OfficeDirector")) { //business logic 2 } else if (li

我有一个方法返回员工职位列表
list listPositions
。如果方法只返回一个字符串,则基本逻辑如下:

if (listPositions.Contains("Admin"))
{
   // business logic 1,for example Console.WriteLine("I'm Admin");
}
else if (listPositions.Contains("OfficeDirector"))
{
  //business logic 2
}
else if (listPositions.Contains("Regular") || listPositions.Contains("HumanResource"))
{
  //business logic 3
}
现在,这个方法可以返回多个字符串,例如,雇员可以是管理员和办公室主任。现在我需要将first
if
和first
else if
中的实现结合起来,我不想在几个if语句中迷失方向,所以我想问您是否有更优雅的解决方案来解决这个问题。 谢谢。

你可以用一个声明,我发现它们更容易阅读

或者,与其使用if/else,if/else,不如在一行中使用一组if语句。然后,它们可以捕捉到有效位置:

if (listPositions.Contains("Admin"))
{
   // Concatenate some string or add to a list for final checking
}
if (listPositions.Contains("OfficeDirector"))
{
  // Concatenate some string or add to a list for final checking
}
if (listPositions.Contains("Regular") || listPositions.Contains("HumanResource"))
{
  // Concatenate some string or add to a list for final checking
}
然后在最后检查该人员持有的职位,并应用所有相关的业务逻辑。

您可以使用一个声明,我发现它们更容易阅读

或者,与其使用if/else,if/else,不如在一行中使用一组if语句。然后,它们可以捕捉到有效位置:

if (listPositions.Contains("Admin"))
{
   // Concatenate some string or add to a list for final checking
}
if (listPositions.Contains("OfficeDirector"))
{
  // Concatenate some string or add to a list for final checking
}
if (listPositions.Contains("Regular") || listPositions.Contains("HumanResource"))
{
  // Concatenate some string or add to a list for final checking
}

然后在最后检查该人员担任的职位,并应用所有相关的业务逻辑。

这里您要使用的是一个。这本书的重要内容是Gamma等人的书。如果你是设计模式的新手,可能更容易理解。很多网站和其他资源都在讨论这一模式。我强烈建议您查看它以及这些参考资料中讨论的其他设计模式。

这里您要使用的是一个。这本书的重要内容是Gamma等人的书。如果你是设计模式的新手,可能更容易理解。很多网站和其他资源都在讨论这一模式。我强烈建议您查看它以及这些参考资料中讨论的其他设计模式。

您可以定义
Dictionary
Dictionary

Dictionary<string, Action> actions = new Dictionary<string, Action>
{
  { "Admin", new Action(() => Console.WriteLine("I'm Admin")) },
  { "OfficeDirector", new Action(() => Console.WriteLine("I'm OfficeDirector")) },
  { "Regular", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) },
  { "HumanResource", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) },
};
编辑: 或者用作键
谓词
,更复杂的示例:

static Dictionary<Predicate<string>, Action> PredicatedActions = new Dictionary<Predicate<string>, Action>()
{
  { p => p == "Admin", new Action(() => Console.WriteLine("I'm Admin")) },
  { p => p == "OfficeDirector", new Action(() => Console.WriteLine("I'm OfficeDirector")) },
  { p => p == "HumanResource" || p == "Regular", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) }
};

您可以定义
字典
字典

Dictionary<string, Action> actions = new Dictionary<string, Action>
{
  { "Admin", new Action(() => Console.WriteLine("I'm Admin")) },
  { "OfficeDirector", new Action(() => Console.WriteLine("I'm OfficeDirector")) },
  { "Regular", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) },
  { "HumanResource", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) },
};
编辑: 或者用作键
谓词
,更复杂的示例:

static Dictionary<Predicate<string>, Action> PredicatedActions = new Dictionary<Predicate<string>, Action>()
{
  { p => p == "Admin", new Action(() => Console.WriteLine("I'm Admin")) },
  { p => p == "OfficeDirector", new Action(() => Console.WriteLine("I'm OfficeDirector")) },
  { p => p == "HumanResource" || p == "Regular", new Action(() => Console.WriteLine("I'm Regular or HumanResource")) }
};

首先,将数据结构切换到
HashSet
而不是
列表
。首先,将数据结构切换到
HashSet
而不是
列表