2014-03-18 116 views
0

我需要的狀態值從外部源映射:映射外部狀態到內部狀態+提供多個「表示」的狀態

  • 外部源狀態== 1 - >內部源狀態== 2 ==「NEW」
  • 外部源狀態== 5 - >內部源狀態== 7 ==「處理過的」

所以,我有時需要表示內部狀態如整數或字符串..我認爲我應該在一個函數中做到這一點,因爲無論數據類型如何,狀態都代表着同樣的事情。

我的問題是,我創建一個函數,將外部源狀態作爲參數,然後返回一個鍵值對?我不想創建2個函數。

鉭,

瑜伽士

回答

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!"); 
} 
+0

Ta爲所有答覆夥計。我去與奧利維爾的。 –

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}, 
}; 

(你可以在運行時建立這個字典,如果你的狀態是真的是大;對於足夠小的枚舉,它可能更容易就自己構建它。)

+0

如果必須爲用戶生成文本輸出,則枚舉不適用。枚舉常量綁定到標識符的規則。例如。他們必須擁有PascalCasing,沒有空格等等。用戶輸出是文化特定的。 –

+0

@ OlivierJacot-Descombes如果他實際上需要這種靈活性,那麼當然,這可能不是最好的選擇,但他可能並不處於他的應用要求的位置。 – Servy