【问题标题】:Map list value to another list based on predefined relation in C#根据 C# 中的预定义关系将列表值映射到另一个列表
【发布时间】:2022-01-21 04:46:00
【问题描述】:

我需要根据给定的关系/条件将一个列表值转换为另一个。

List1 值 = ["Red","Green","Blue"]

必需列表 = ["RD","GR","BLU"]

List1 和 List2 之间的关系映射

Red = Rd
Green = GR
Blue = BLU

我们可以做一个 foreach 循环来实现这一点。 但是有没有更好的方法来做到这一点,例如这可以通过 Automapper 来完成吗? 我无法在自动映射器中找到任何支持此功能的解决方案。

【问题讨论】:

  • 您是否考虑过使用单个 Dictionary<string, string> 而不是两个列表?

标签: c# .net arraylist


【解决方案1】:

如果您需要能够在两个方向上执行转换,您可以使用两个枚举来实现此目的 - 每个表单一个枚举 - 以相同的顺序。例如:

public enum ColorLong
{
     Red,
     Green,
     ...
}

public enum ColorShort
{
     RD,
     GR,
     ...
}

要从一种形式映射到另一种形式,只需使用不区分大小写的解析将字符串输入解析为正确的枚举类型,然后将该结果转换为目标枚举类型。

当您将字符串解析为源类型枚举时,您实际上会得到一个与枚举中元素位置相对应的整数值(默认情况下)。只要两个枚举的值顺序相同,就可以正常工作。不需要条件逻辑或 switch 语句!

例如,从长格式解析为短格式:

var longForm = Enum.Parse<ColorLong>(inputString, true);
var shortForm = (ColorShort) ((int)longForm);

【讨论】:

    【解决方案2】:

    从您的问题陈述来看,我的 原型设计模式 非常适合这里。您可以使用此 DP 解决此问题,即使这样,您将来也可以添加更多关系/条件。例如:[安全、危险、警告]、[失败、成功、不完整]等组合,您可以在不触及现有逻辑的情况下进行映射。 你可以关注https://www.dofactory.com/net/prototype-design-pattern 学习 Prototype DP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2018-06-09
      相关资源
      最近更新 更多