将外部状态映射到内部状态+提供状态的多个“表示”

时间:2014-03-18 18:43:39

标签: c#

我需要映射来自外部源的状态值:

  • 外部来源状态== 1 - >内部来源状态== 2 ==“新”
  • 外部来源状态== 5 - >内部来源状态== 7 ==“已处理”

所以,我有时需要将内部状态表示为整数或字符串。我想我应该在一个函数中执行此操作,因为无论dataType如何,状态都表示相同的事情。

我的问题是,我是否创建了一个将外部源状态作为arg的函数,然后返回一个键值对?我不想创建2个函数。

的Ta,

瑜珈

2 个答案:

答案 0 :(得分:1)

您的数据在逻辑上是两种不同的enum类型,它们将相同的值映射到不同的整数:

public enum ExternalSourceStatus
{
    NEW = 1,
    PROCESSED = 5,
}
public enum InternalSourceStatus
{
    NEW = 2,
    PROCESSED = 7,
}

然后,您可以创建字典以将外部状态映射到内部状态:

var statusMap = new Dictionary<ExternalSourceStatus, InternalSourceStatus>()
{
    {ExternalSourceStatus.NEW, InternalSourceStatus.NEW},
    {ExternalSourceStatus.PROCESSED, InternalSourceStatus.PROCESSED},
};

(您可以在运行时构建此词典,如果您的状态真的大;对于足够小的枚举,可能更容易自己构建它。)

答案 1 :(得分:0)

首先创建一个代表内部状态的类

public class InternalStatus
{
    public int ID { get; set; }
    public string Name { get; set; }
}

然后您可以通过将外部ID作为键

来构建字典
private Dictionary<int, InternalStatus> _map = new Dictionary<int, InternalStatus>();

添加映射

_map.Add(1, new InternalStatus { ID = 2, Name = "NEW" });
_map.Add(5, new InternalStatus { ID = 7, Name = "PROCESSED" });

现在你可以查找这样的映射:

int externalStatusID = 5;
InternalStatus internalStatus;
if (_map.TryGetValue(externalStatusID, out internalStatus)) {
    Console.WriteLine("Internal status ID = {0}, Name = {1}",
        internalStatus.ID, internalStatus.Name);
} else {
    Console.WriteLine("Status not found!");
}